मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इस बाइनरी ट्री में अधिकतम पूर्ण उप-वृक्ष का आकार खोजना होगा। जैसा कि हम जानते हैं कि एक पूर्ण बाइनरी ट्री एक बाइनरी ट्री है यदि सभी स्तर पूरी तरह से बिना संभावित अंतिम स्तर के भरे हुए हैं और अंतिम स्तर में यथासंभव सभी कुंजियाँ हैं।
तो, अगर इनपुट पसंद है
तो आउटपुट 4 आकार के रूप में होगा और इनऑर्डर ट्रैवर्सल 10, 45, 60, 70,
होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- isComplete, isPerfect जैसे कुछ मापदंडों के साथ वापसी प्रकार को परिभाषित करें, ये शुरू में झूठे हैं, फिर आकार और रूटट्री, आकार शुरू में 0 है और रूटट्री शून्य है।
- ret_type :=returnType
- यदि रूट रिक्त है, तो
- ret_type.isPerfect :=True
- ret_type.isComplete :=True
- ret_type.size:=0
- ret_type.rootTree :=कोई नहीं
- रिटर्न रिट_टाइप
- left_tree :=checkCompletness(root.left)
- right_tree :=checkCompletness(root.right)
- अगर (left_tree.isPerfect सही है और right_tree.isComplete सही है और बाएं और दाएं पेड़ की ऊंचाई समान है, तो
- ret_type.isComplete :=True
- ret_type.isPerfect :=right_tree.isPerfect
- ret_type.size:=left_tree.size + right_tree.size + 1
- ret_type.rootTree :=root
- रिटर्न रिट_टाइप
- अगर (left_tree.isComplete is True और right_tree.isPerfect सही है और बाएं और दाएं पेड़ की ऊंचाई समान है, तो
- ret_type.isComplete :=True
- ret_type.isPerfect :=False
- ret_type.size:=left_tree.size + right_tree.size + 1
- ret_type.rootTree :=root
- रिटर्न रिट_टाइप
- ret_type.isPerfect :=False
- ret_type.isComplete:=असत्य
- ret_type.size :=अधिकतम left_tree.size, right_tree.size
- अगर left_tree.size> right_tree.size, तो
- ret_type.rootTree :=left_tree.rootTree
- अन्यथा,
- ret_type.rootTree :=right_tree.rootTree
- रिटर्न रिट_टाइप
पायथन
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
import math class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class returnType : def __init__(self): self.isPerfect = None self.isComplete = None self.size = 0 self.rootTree = None def getHeight(size): return int(math.ceil(math.log(size + 1)/math.log(2))) def checkCompleteness(root) : ret_type = returnType() if (root == None): ret_type.isPerfect = True ret_type.isComplete = True ret_type.size = 0 ret_type.rootTree = None return ret_type left_tree = checkCompleteness(root.left) right_tree = checkCompleteness(root.right) if (left_tree.isPerfect == True and right_tree.isComplete == True and getHeight(left_tree.size) == getHeight(right_tree.size)) : ret_type.isComplete = True ret_type.isPerfect = right_tree.isPerfect ret_type.size = left_tree.size + right_tree.size + 1 ret_type.rootTree = root return ret_type if (left_tree.isComplete == True and right_tree.isPerfect == True and getHeight(left_tree.size) == getHeight(right_tree.size) + 1): ret_type.isComplete = True ret_type.isPerfect = False ret_type.size = left_tree.size + right_tree.size + 1 ret_type.rootTree = root return ret_type ret_type.isPerfect = False ret_type.isComplete = False ret_type.size =max(left_tree.size, right_tree.size) if(left_tree.size > right_tree.size ): ret_type.rootTree = left_tree.rootTree else: ret_type.rootTree = right_tree.rootTree return ret_type def print_tree(root): if root is not None: print_tree(root.left) print(root.data, end = ', ') print_tree(root.right) root = TreeNode(50) root.left = TreeNode(30) root.right = TreeNode(60) root.left.left = TreeNode(5) root.left.right = TreeNode(20) root.right.left = TreeNode(45) root.right.right = TreeNode(70) root.right.left.left = TreeNode(10) ans = checkCompleteness(root) print( "Size:" , ans.size ) print("Inorder Traversal: ", end = '') print_tree(ans.rootTree)
इनपुट
root = TreeNode(50) root.left = TreeNode(30) root.right = TreeNode(60) root.left.left = TreeNode(5) root.left.right = TreeNode(20) root.right.left = TreeNode(45) root.right.right = TreeNode(70) root.right.left.left = TreeNode(10)
आउटपुट:
Size: 4 Inorder Traversal: 10, 45, 60, 70,