যখন একটি বাইনারি ট্রি নির্মাণ করা এবং উপাদান ইনসার্ট করা, ডিলিট করা ও প্রদর্শন করা ইত্যাদি অপারেশন সম্পাদন করা প্রয়োজন হয়, তখন একটি ক্লাস নির্ধারণ করা হয় যাতে সেই মেথডগুলো থাকে। ক্লাসের একটি ইনস্ট্যান্স তৈরি করে সেই মেথডগুলো অ্যাক্সেস করা হয় এবং অপারেশনগুলো সম্পাদন করা হয়।
নিচে এর একটি উদাহরণ দেওয়া হলো:
উদাহরণ
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' অ্যাসাইন করা হয়েছে।
যে অপারেশনটি করতে হবে তার জন্য ইউজার ইনপুট নেওয়া হয়েছে।
ইউজারের পছন্দ অনুযায়ী অপারেশনটি সম্পাদন করা হয়েছে।
প্রাসঙ্গিক আউটপুট কনসোলে প্রদর্শিত হয়েছে।