যখন ক্রমানুসারে ট্রাভার্সাল ব্যবহার করে একটি গাছের মধ্যে সবচেয়ে বড় মান খুঁজে বের করার প্রয়োজন হয়, তখন একটি বাইনারি ট্রি ক্লাস তৈরি করা হয় রুট এলিমেন্ট সেট করার, রিকারশন ব্যবহার করে ক্রমান্বয়ে ট্রাভার্সাল করার পদ্ধতি সহ।
ক্লাসের একটি উদাহরণ তৈরি করা হয়, এবং এটি পদ্ধতিগুলি অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।
নীচে একই −
এর প্রদর্শন করা হলউদাহরণ
class BinaryTree_Struct:
def __init__(self, key=None):
self.key = key
self.left = None
self.right = None
def set_root(self, key):
self.key = key
def inorder_traversal_largest(self):
largest = []
self.inorder_largest_helper_fun(largest)
return largest[0]
def inorder_largest_helper_fun(self, largest):
if self.left is not None:
self.left.inorder_largest_helper_fun(largest)
if largest == []:
largest.append(self.key)
elif largest[0] < self.key:
largest[0] = self.key
if self.right is not None:
self.right.inorder_largest_helper_fun(largest)
def insert_to_left(self, new_node):
self.left = new_node
def insert_to_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
my_instance = None
print('Menu (this assumes no duplicate keys)')
print('insert <data> at root')
print('insert <data> left of <data>')
print('insert <data> right of <data>')
print('largest')
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 exists')
continue
if suboperation == 'left':
ref_node.insert_to_left(new_node)
elif suboperation == 'right':
ref_node.insert_to_right(new_node)
elif operation == 'largest':
if my_instance is None:
print('The tree is empty')
else:
print('The largest element is : {}'.format(my_instance.inorder_traversal_largest()))
elif operation == 'quit':
break আউটপুট
Menu (this assumes no duplicate keys) insert <data> at root insert <data> left of <data> insert <data> right of <data> largest quit What operation would you do ? insert 8 at root What operation would you do ? insert 9 left of 8 What operation would you do ? insert 4 right of 8 What operation would you do ? largest The largest element is : 9 What operation would you do ? > Use quit() or Ctrl-D (i.e. EOF) to exit
ব্যাখ্যা
-
প্রয়োজনীয় গুণাবলী সহ 'BinaryTree_struct' ক্লাস তৈরি করা হয়েছে।
-
এটির একটি 'init' ফাংশন রয়েছে যা বাম এবং ডান নোডগুলিকে 'কোনও নয়' এ সেট করতে ব্যবহৃত হয়।
-
এটির একটি 'set_root' পদ্ধতি রয়েছে যা বাইনারি গাছের মূল সেট করতে সাহায্য করে।
-
'inorder_traversal_largest' নামে আরেকটি পদ্ধতি যা পুনরাবৃত্তি ব্যবহার করে ইনঅর্ডার ট্রাভার্সাল সম্পাদন করে।
-
তাই এটির পাশাপাশি সংজ্ঞায়িত একটি সহায়ক ফাংশন রয়েছে৷
৷ -
'insert_to_right' নামে আরেকটি পদ্ধতি সংজ্ঞায়িত করা হয়েছে যা রুট নোডের ডানদিকে উপাদান যোগ করতে সাহায্য করে।
-
'insert_to_left' নামের একটি পদ্ধতি সংজ্ঞায়িত করা হয়েছে, যা রুট নোডের বাম দিকে উপাদান যোগ করতে সাহায্য করে।
-
'সার্চ_এলেম' নামের একটি পদ্ধতি সংজ্ঞায়িত করা হয়েছে, যা একটি নির্দিষ্ট উপাদান অনুসন্ধানে সহায়তা করে।
-
'BinaryTree_struct' ক্লাসের একটি অবজেক্ট তৈরি করা হয়েছে।
-
যে ক্রিয়াকলাপটি সম্পাদন করা প্রয়োজন তার জন্য ব্যবহারকারীর ইনপুট নেওয়া হয়৷
-
ব্যবহারকারীর পছন্দের উপর নির্ভর করে, অপারেশন সঞ্চালিত হয়।
-
প্রাসঙ্গিক আউটপুট কনসোলে প্রদর্শিত হয়।