কম্পিউটার টিউটোরিয়াল

পাইথন প্রোগ্রাম: বাইনারি ট্রির শুধু লেফট সাবট্রির নোডগুলো প্রিন্ট করুন

বাইনারি ট্রির লেফট সাবট্রির নোডগুলো প্রিন্ট করতে একটি ক্লাস তৈরি করা হয় যেখানে রুট নোড সেট করা, ইনঅর্ডার ট্রভার্সাল করা, রুট নোডের ডানে এবং বামে এলিমেন্ট ইনসার্ট করা ইত্যাদি মেথড থাকে। ক্লাসের একটি ইনস্ট্যান্স তৈরি করে মেথডগুলো ব্যবহার করে প্রয়োজনীয় অপারেশন সম্পাদন করা হয়।

উদাহরণ

class BinaryTree_struct:
    def __init__(self, data=None):
        self.key = data
        self.left = None
        self.right = None

    def set_root(self, data):
        self.key = data

    def inorder_traversal(self):
        if self.left is not None:
            self.left.inorder_traversal()
        print(self.key, end=' ')
        if self.right is not None:
            self.right.inorder_traversal()

    def insert_at_left(self, new_node):
        self.left = new_node

    def insert_at_right(self, new_node):
        self.right = new_node

    def search_elem(self, key):
        if self.key == key:
            return self
        if self.left is not None:
            temp = self.left.search_elem(key)
            if temp is not None:
                return temp
        if self.right is not None:
            temp = self.right.search_elem(key)
            return temp
        return None

    def print_left_part(self):
        if self.left is not None:
            self.left.inorder_traversal()

my_instance = None
print('Menu (this assumes no duplicate keys)')
print('insert  at root')
print('insert  left of ')
print('insert  right of ')
print('left')
print('quit')

while True:
    my_input = input('What operation would you do ? ').split()
    operation = my_input[0].strip().lower()

    if operation == 'insert':
        data = int(my_input[1])
        new_node = BinaryTree_struct(data)
        suboperation = my_input[2].strip().lower()

        if suboperation == 'at':
            my_instance = new_node
        else:
            position = my_input[4].strip().lower()
            key = int(position)
            ref_node = None
            if my_instance is not None:
                ref_node = my_instance.search_elem(key)
            if ref_node is None:
                print('No such key')
                continue
            if suboperation == 'left':
                ref_node.insert_at_left(new_node)
            elif suboperation == 'right':
                ref_node.insert_at_right(new_node)

    elif operation == 'left':
        print('Nodes of the left subtree are : ', end='')
        if my_instance is not None:
            my_instance.print_left_part()
        print()

    elif operation == 'quit':
        break

আউটপুট

Menu (this assumes no duplicate keys)
insert  at root
insert  left of 
insert  right of 
left
quit
What operation would you do ? insert 5 at root
What operation would you do ? insert 6 left of 5
What operation would you do ? insert 8 right of 5
What operation would you do ? left
Nodes of the left subtree are : 6
What operation would you do ? quit
Use quit() or Ctrl-D (i.e. EOF) to exit

ব্যাখ্যা

  • 'BinaryTree_struct' ক্লাস প্রয়োজনীয় অ্যাট্রিবিউটসহ তৈরি করা হয়েছে।
  • এতে একটি 'init' ফাংশন আছে যা লেফট এবং রাইট নোডকে 'None' এ असাইন করে।
  • 'set_root' মেথড বাইনারি ট্রির রুট ভ্যালু সেট করতে সাহায্য করে।
  • 'insert_at_right' মেথড ট্রির ডান নোডগুলিতে এলিমেন্ট যোগ করতে সাহায্য করে।
  • 'insert_at_left' মেথড ট্রির বাম নোডগুলিতে এলিমেন্ট যোগ করতে সাহায্য করে।
  • 'inorder_traversal' নামক মেথড ইনঅর্ডার ট্রভার্সাল সম্পাদন করে।
  • 'search_elem' মেথড নির্দিষ্ট এলিমেন্ট সার্চ করতে সাহায্য করে।
  • 'print_left_part' মেথড কনসোলে বাইনারি ট্রির শুধু বাম অংশ প্রদর্শন করে।
  • একটি ইনস্ট্যান্স তৈরি করে 'None' এ অ্যাসাইন করা হয়েছে।
  • ব্যবহারকারীর ইনপুট নেওয়া হয়েছে অপারেশন কী হবে সেটি নির্ধারণের জন্য।
  • ব্যবহারকারীর চয়ন অনুযায়ী অপারেশন সম্পাদন করা হয়েছে এবং আউটপুট দেখানো হয়েছে।
  1. পাইথনে একটি ট্রি অন্য ট্রির সাবট্রি কিনা যাচাই করা

  2. পাইথনে লিস্ট থেকে বিজোড় সংখ্যা প্রিন্ট করা

  3. পাইথনে লিস্ট থেকে নেগেটিভ সংখ্যা প্রিন্ট করা

  4. পাইথন প্রোগ্রাম: ম্যাট্রিক্স Z আকারে প্রিন্ট করা