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

Python में बाइनरी ट्री अधिकतम पथ योग


मान लीजिए हमारे पास एक गैर-खाली बाइनरी ट्री है। हमें पथ योग ढूंढना है। तो यहां, एक पथ कुछ प्रारंभिक नोड से किसी भी नोड तक नोड्स का कोई अनुक्रम है जहां पैरेंट-चाइल्ड कनेक्शन मौजूद हैं। पथ में कम से कम एक नोड होना चाहिए और रूट नोड से गुजरने की आवश्यकता नहीं है। इसलिए यदि इनपुट ट्री है −

Python में बाइनरी ट्री अधिकतम पथ योग

यहां आउटपुट 32 होगा।

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

  • solve() नामक एक विधि परिभाषित करें, यह नोड लेगा

  • यदि नोड null है या नोड का मान 0 है, तो 0 लौटाएं

  • left := 0 और solve(नोड के बाएं) का अधिकतम

  • right := 0 और solve(नोड के दाएं) का अधिकतम

  • ans := ans और left + right + नोड के डेटा का अधिकतम

  • नोड डेटा + left और right का अधिकतम लौटाएं

  • मुख्य विधि से, ans := -inf सेट करें, फिर solve(root) कॉल करें और ans लौटाएं

उदाहरण

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

class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def maxPathSum(self, root): self.ans = -float('inf') self.solve(root) return self.ans def solve(self,node): if not node or node.data == 0: return 0 left = max(0,self.solve(node.left)) right = max(0,self.solve(node.right)) self.ans = max(self.ans,left+right+node.data) return node.data + max(left,right) ob = Solution() root = make_tree([-10,9,10,None,None,15,7]) print(ob.maxPathSum(root))

इनपुट

[-10,9,10,None,None,15,7]

आउटपुट

32

  1. पायथन में जिगजैग लेबल्ड बाइनरी ट्री में पथ पायथन में जिगजैग लेबल्ड बाइनरी ट्री में पथ

    मान लीजिए एक अनंत बाइनरी ट्री में जहां प्रत्येक नोड के दो चिल्ड्रन हैं, नोड्स रो ऑर्डर में लेबल किए गए हैं। अब विषम नंबर वाली पंक्तियों (पहली, तीसरी, पांचवीं, ...) में, लेबलिंग बाएं से दाएं है, और सम नंबर वाली पंक्तियों (दूसरी, चौथी, छठी, ...) में, लेबलिंग दाएं से बाएं है। इसलिए ट्री इस तरह होगा -इस

  1. पायथन में पथ योग पायथन में पथ योग

    मान लीजिए हमारे पास एक ट्री और एक योग है। हमें एक ऐसा पथ ढूंढना है जिससे यदि हम उस पथ का अनुसरण करें, तो हमें वह योग मिलेगा जो दिए गए योग से मेल खाता हो। मान लीजिए ट्री [0,-3,9,-10, null,5] जैसा है और योग 14 है, तो एक पथ 0 → 9 → 5 है। हल करने के चरण यदि रूट null है, तो False वापस करें यदि बायां औ

  1. पायथन में बाइनरी ट्री की अधिकतम गहराई पायथन में बाइनरी ट्री की अधिकतम गहराई

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें उस ट्री की अधिकतम गहराई ढूंढनी है। ट्री की अधिकतम गहराई वह अधिकतम नोड्स की संख्या है जो सबसे लंबे पथ का उपयोग करके रूट से लीफ तक पहुंचने के लिए पार की जाती है। मान लीजिए ट्री नीचे जैसा है। यहां गहराई 3 होगी। हल करने के चरण यहां हम पुनरावर्ती दृष्टिकोण क