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

পাইথন প্রোগ্রাম: বাইনারি ট্রি নির্মাণ, ইনসারশন, ডিলিশন ও ডিসপ্লে


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

নিচে এর একটি উদাহরণ দেওয়া হলো:

উদাহরণ

class Tree_struct:
    def __init__(self, data=None, parent=None):
        self.key = data
        self.children = []
        self.parent = parent
    def set_root(self, data):
        self.key = data
    def add_node(self, node):
        self.children.append(node)
    def search_node(self, key):
        if self.key == key:
            return self
        for child in self.children:
            temp = child.search_node(key)
            if temp is not None:
                return temp
        return None
    def remove_node(self):
        parent = self.parent
        index = parent.children.index(self)
        parent.children.remove(self)
        for child in reversed(self.children):
            parent.children.insert(index, child)
            child.parent = parent
    def bfs(self):
        queue = [self]
        while queue != []:
            popped = queue.pop(0)
            for child in popped.children:
                queue.append(child)
            print(popped.key, end=' ')

my_instance = None
print('Menu (this assumes no duplicate keys)')
print('add  at root')
print('add  below ')
print('remove ')
print('display')
print('quit')
while True:
    do = input('What would you like to do? ').split()
    operation = do[0].strip().lower()
    if operation == 'add':
        data = int(do[1])
        new_node = Tree_struct(data)
        suboperation = do[2].strip().lower()
        if suboperation == 'at':
            my_instance = new_node
        elif suboperation == 'below':
            position = do[3].strip().lower()
            key = int(position)
            ref_node = None
            if my_instance is not None:
                ref_node = my_instance.search_node(key)
            if ref_node is None:
                print('No such key.')
                continue
            new_node.parent = ref_node
            ref_node.add_node(new_node)
    elif operation == 'remove':
        data = int(do[1])
        to_remove = my_instance.search_node(data)
        if my_instance == to_remove:
            if my_instance.children == []:
                my_instance = None
            else:
                leaf = my_instance.children[0]
                while leaf.children != []:
                    leaf = leaf.children[0]
                leaf.parent.children.remove_node(leaf)
                leaf.parent = None
                leaf.children = my_instance.children
                my_instance = leaf
        else:
            to_remove.remove_node()
    elif operation == 'display':
        if my_instance is not None:
            print('Breadth First Search traversal is : ', end='')
            my_instance.bfs()
            print()
        else:
            print('The tree is empty')
    elif operation == 'quit':
        break

আউটপুট

Menu (this assumes no duplicate keys)
add  at root
add  below 
remove 
display
quit
What would you like to do? add 5 at root
What would you like to do? add 6 below 5
What would you like to do? add 8 below 6
What would you like to do? remove 8
What would you like to do? display
Breadth First Search traversal is : 5 6
What would you like to do? quit

ব্যাখ্যা

  • প্রয়োজনীয় অ্যাট্রিবিউটসহ 'Tree_struct' ক্লাস তৈরি করা হয়েছে।

  • এতে একটি 'init' ফাংশন আছে যা খালি লিস্ট তৈরি করতে ব্যবহৃত হয়।

  • 'set_root' নামে আরেকটি মেথড নির্ধারণ করা হয়েছে ট্রির রুট নির্দিষ্ট করতে।

  • 'add_node' নামে আরেকটি মেথড নির্ধারণ করা হয়েছে ট্রিতে নোড যোগ করতে।

  • 'search_node' নামে আরেকটি মেথড নির্ধারণ করা হয়েছে নির্দিষ্ট উপাদান খুঁজে বের করতে।

  • 'remove_node' নামে একটি মেথড নির্ধারণ করা হয়েছে, যা ট্রি থেকে উপাদান ডিলিট করে।

  • 'bfs' নামে আরেকটি মেথড নির্ধারণ করা হয়েছে, যা ট্রিতে ব্রেডথ-ফার্স্ট সার্চ সম্পাদন করে।

  • একটি ইনস্ট্যান্স তৈরি করা হয়েছে এবং 'None' অ্যাসাইন করা হয়েছে।

  • যে অপারেশনটি করতে হবে তার জন্য ইউজার ইনপুট নেওয়া হয়েছে।

  • ইউজারের পছন্দ অনুযায়ী অপারেশনটি সম্পাদন করা হয়েছে।

  • প্রাসঙ্গিক আউটপুট কনসোলে প্রদর্শিত হয়েছে।


  1. পাইথন প্রোগ্রাম: টারনারি ট্রি থেকে ডাবলি লিংকড লিস্ট তৈরি

  2. পাইথন প্রোগ্রাম: দिये गये এক্সপ্রেশন থেকে এক্সপ্রেশন ট্রি (Expression Tree) নির্মাণ

  3. পাইথনে বাইনারি ট্রি কলারিং গেম

  4. পাইথনে বাইনারি ট্রির ডায়ামিটার