Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में समान बाएं और दाएं उपट्री वाले सबसे बड़े उपट्री को ढूंढना


मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें समान बाएं और दाएं उपट्री वाले सबसे बड़े उपट्री को ढूंढना है। पसंदीदा समय जटिलता O(n) है।

तो, यदि इनपुट इस तरह है

Python में समान बाएं और दाएं उपट्री वाले सबसे बड़े उपट्री को ढूंढना

तो आउटपुट होगा

Python में समान बाएं और दाएं उपट्री वाले सबसे बड़े उपट्री को ढूंढना

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन solve() परिभाषित करें। यह root, encode, maxSize, maxNode लेगा

  • यदि root, None है, तो

    • 0 वापस करें

  • left_list := एक खाली स्ट्रिंग के साथ सूची

  • right_list := एक खाली स्ट्रिंग के साथ सूची

  • ls := solve(root.left, left_list, maxSize, maxNode)

  • rs := solve(root.right, right_list, maxSize, maxNode)

  • size := ls + rs + 1

  • यदि left_list[0], right_list[0] के समान है, तो

    • यदि size > maxSize[0], तो

      • maxSize[0] := size

      • maxNode[0] := root

  • encode[0] := encode[0] concatenate "|" concatenate left_list[0] concatenate "|"

  • encode[0] := encode[0] concatenate "|" concatenate str(root.data) concatenate "|"

  • encode[0] := encode[0] concatenate "|" concatenate right_list[0] concatenate "|"

  • size वापस करें

  • मुख्य विधि से, निम्नलिखित करें -

  • maximum := [0]

  • encode := एक खाली स्ट्रिंग के साथ सूची

  • solve(node, encode, maximum, maxNode)

  • maximum वापस करें

उदाहरण

बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

class TreeNode:     def __init__(self, data):         self.data = data         self.left = self.right = None def solve(root, encode, maxSize, maxNode):     if (root == None):         return 0     left_list = [""]     right_list = [""]     ls = solve(root.left, left_list, maxSize, maxNode)     rs = solve(root.right, right_list, maxSize, maxNode)     size = ls + rs + 1     if (left_list[0] == right_list[0]):         if (size > maxSize[0]):             maxSize[0] = size             maxNode[0] = root     encode[0] = encode[0] + "|" + left_list[0] + "|"     encode[0] = encode[0] + "|" + str(root.data) + "|"     encode[0] = encode[0] + "|" + right_list[0] + "|"     return size def largestSubtree(node, maxNode):     maximum = [0]     encode = [""]     solve(node, encode, maximum, maxNode)     return maximum root = TreeNode(55) root.left = TreeNode(15) root.right = TreeNode(70) root.left.left = TreeNode(10) root.left.right = TreeNode(25) root.right.left = TreeNode(75) root.right.left.left = TreeNode(65) root.right.left.right = TreeNode(80) root.right.right = TreeNode(75) root.right.right.left = TreeNode(65) root.right.right.right = TreeNode(80) maxNode = [None] maximum = largestSubtree(root, maxNode) print("Root of largest sub-tree", maxNode[0].data) print("and its size is ", maximum)

इनपुट

root = TreeNode(55) root.left = TreeNode(15) root.right = TreeNode(70) root.left.left = TreeNode(10) root.left.right = TreeNode(25) root.right.left = TreeNode(75) root.right.left.left = TreeNode(65) root.right.left.right = TreeNode(80) root.right.right = TreeNode(75) root.right.right.left = TreeNode(65) root.right.right.right = TreeNode(80)

आउटपुट

Root of largest sub-tree 70 and its size is [7]

  1. पायथन में बाइनरी ट्री के किसी भी पथ का सबसे बड़ा योग खोजने का प्रोग्राम पायथन में बाइनरी ट्री के किसी भी पथ का सबसे बड़ा योग खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें रूट नोड से लीफ नोड तक जाने वाले किसी भी पथ का सबसे बड़ा योग ढूंढना है। उदाहरण के लिए, यदि इनपुट जैसा है: तो आउटपुट 29 होगा क्योंकि रूट से, यदि हम पथ 5-<9-<7-<8 का पालन करते हैं तो जोड़ के बाद यह 29 होगा। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:

  1. पायथन में दिए गए बाइनरी ट्री में सबसे बड़ा पूर्ण उपट्री खोजें पायथन में दिए गए बाइनरी ट्री में सबसे बड़ा पूर्ण उपट्री खोजें

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इस बाइनरी ट्री में अधिकतम पूर्ण उप-ट्री का आकार ढूंढना है। जैसा कि हम जानते हैं, एक पूर्ण बाइनरी ट्री वह बाइनरी ट्री है जहां सभी स्तर पूरी तरह भरे होते हैं, संभवतः अंतिम स्तर को छोड़कर, और अंतिम स्तर में सभी कुंजियां यथासंभव बाईं ओर होती हैं। इसलिए, यदि इ

  1. पायथन में दिए गए बाइनरी ट्री में सबसे बड़ा परफेक्ट सबट्री खोजें पायथन में दिए गए बाइनरी ट्री में सबसे बड़ा परफेक्ट सबट्री खोजें

    मान लीजिए हमारे पास एक दिया गया बाइनरी ट्री है; हमें उस दिए गए बाइनरी ट्री में सबसे बड़े परफेक्ट सब-ट्री का आकार ढूंढना है। जैसा कि हम जानते हैं, परफेक्ट बाइनरी ट्री एक बाइनरी ट्री है जिसमें सभी आंतरिक नोड्स के दो बच्चे होते हैं और सभी पत्ते समान स्तर पर होते हैं।तो, यदि इनपुट इस तरह है:तो आउटपुट 3