जब इनऑर्डर ट्रैवर्सल का उपयोग करके ट्री में सबसे बड़ा मान खोजना हो, तो एक बाइनरी ट्री क्लास बनाई जाती है जिसमें रूट एलिमेंट सेट करने, रीकर्सन का उपयोग करके इनऑर्डर ट्रैवर्सल करने आदि के लिए मेथड्स होते हैं।
क्लास का एक इंस्टेंस बनाया जाता है और इसका उपयोग मेथड्स को एक्सेस करने के लिए किया जा सकता है।
उदाहरण
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('मेन्यू (यह मानता है कोई डुप्लिकेट कीज़ नहीं)')
print('insert at root')
print('insert left of ')
print('insert right of ')
print('largest')
print('quit')
while True:
my_input = input('आप कौन सा ऑपरेशन करेंगे? ').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('ऐसी कोई की नहीं है')
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('ट्री खाली है')
else:
print('सबसे बड़ा एलिमेंट है: {}'.format(my_instance.inorder_traversal_largest()))
elif operation == 'quit':
break
आउटपुट
मेन्यू (यह मानता है कोई डुप्लिकेट कीज़ नहीं) insert at root insert left of insert right of largest quit आप कौन सा ऑपरेशन करेंगे? insert 8 at root आप कौन सा ऑपरेशन करेंगे? insert 9 left of 8 आप कौन सा ऑपरेशन करेंगे? insert 4 right of 8 आप कौन सा ऑपरेशन करेंगे? largest सबसे बड़ा एलिमेंट है: 9 आप कौन सा ऑपरेशन करेंगे? > बाहर निकलने के लिए quit() या Ctrl-D (यानी EOF) का उपयोग करें
व्याख्या
आवश्यक एट्रिब्यूट्स के साथ 'BinaryTree_struct' क्लास बनाई जाती है।
इसमें एक 'init' फंक्शन होता है जिसका उपयोग लेफ्ट और राइट नोड्स को 'None' सेट करने के लिए किया जाता है।
इसमें एक 'set_root' मेथड होती है जो बाइनरी ट्री के रूट को सेट करने में मदद करती है।
'inorder_traversal_largest' नामक एक अन्य मेथड जो रीकर्सन का उपयोग करके इनऑर्डर ट्रैवर्सल करती है।
इसलिए इसके साथ एक हेल्पर फंक्शन परिभाषित की जाती है।
'insert_to_right' नामक एक अन्य मेथड परिभाषित की जाती है जो रूट नोड के दाईं ओर एलिमेंट जोड़ने में मदद करती है।
'insert_to_left' नामक एक मेथड परिभाषित की जाती है जो रूट नोड के बाईं ओर एलिमेंट जोड़ने में मदद करती है।
'search_elem' नामक एक मेथड परिभाषित की जाती है जो किसी विशिष्ट एलिमेंट को खोजने में मदद करती है।
'BinaryTree_struct' क्लास का एक ऑब्जेक्ट बनाया जाता है।
उपयोगकर्ता इनपुट उस ऑपरेशन के लिए लिया जाता है जिसे करने की आवश्यकता है।
उपयोगकर्ता की पसंद के आधार पर ऑपरेशन किया जाता है।
प्रासंगिक आउटपुट कंसोल पर प्रदर्शित होता है।