जब ऑर्डर ट्रैवर्सल का उपयोग करके किसी पेड़ में सबसे बड़ा मान खोजने की आवश्यकता होती है, तो रूट तत्व सेट करने के तरीकों के साथ एक बाइनरी ट्री क्लास बनाया जाता है, रिकर्सन का उपयोग करके ऑर्डर ट्रैवर्सल में प्रदर्शन करता है।
वर्ग का एक उदाहरण बनाया जाता है, और इसका उपयोग विधियों तक पहुँचने के लिए किया जा सकता है।
नीचे उसी का प्रदर्शन है -
उदाहरण
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' विधि है जो बाइनरी ट्री की जड़ को सेट करने में मदद करती है।
-
'इनऑर्डर_ट्रैवर्सल_लार्जेस्ट' नाम की एक अन्य विधि जो रिकर्सन का उपयोग करके इनऑर्डर ट्रैवर्सल करती है।
-
इसलिए इसके साथ परिभाषित एक सहायक कार्य है।
-
'insert_to_right' नाम की एक अन्य विधि को परिभाषित किया गया है जो रूट नोड के दाईं ओर तत्व जोड़ने में मदद करती है।
-
'insert_to_left' नाम की एक विधि परिभाषित की गई है, जो रूट नोड के बाईं ओर तत्व जोड़ने में मदद करती है।
-
'Search_elem' नाम की एक विधि परिभाषित की गई है, जो एक विशिष्ट तत्व की खोज में मदद करती है।
-
'BinaryTree_struct' वर्ग का एक ऑब्जेक्ट बनाया जाता है।
-
उपयोगकर्ता इनपुट उस ऑपरेशन के लिए लिया जाता है जिसे निष्पादित करने की आवश्यकता होती है।
-
उपयोगकर्ता की पसंद के आधार पर, ऑपरेशन किया जाता है।
-
प्रासंगिक आउटपुट कंसोल पर प्रदर्शित होता है।