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

पायथन में बाइनरी ट्री का व्यास


मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें ट्री के व्यास की लंबाई की गणना करनी है। बाइनरी ट्री का व्यास वास्तव में ट्री में किन्हीं दो नोड्स के बीच सबसे लंबे पथ की लंबाई है। यह पथ अनिवार्य रूप से रूट से होकर नहीं जाता। यदि ट्री नीचे जैसा है, तो व्यास 3 होगा क्योंकि पथ [4,2,1,3] या [5,2,1,3] की लंबाई 3 है।

पायथन में बाइनरी ट्री का व्यास

हल करने के चरण

  • हम व्यास ढूंढने के लिए dfs का उपयोग करेंगे, answer := 0 सेट करें
  • रूट के साथ dfs फंक्शन कॉल करें dfs(root)
  • dfs इस तरह काम करेगा dfs(node)
  • यदि नोड मौजूद नहीं है, तो 0 वापस करें
  • left := dfs(रूट का बायां सबट्री), और right := dfs(रूट का दायां सबट्री)
  • answer := answer और left + right का अधिकतम
  • left + 1 और right + 1 का अधिकतम वापस करें

उदाहरण

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

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):
            temp.left = TreeNode(data)
            break
        else:
            que.append(temp.left)
        if (not temp.right):
            temp.right = TreeNode(data)
            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 diameterOfBinaryTree(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        self.ans = 0
        self.dfs(root)
        return self.ans

    def dfs(self, node):
        if not node:
            return 0
        left = self.dfs(node.left)
        right = self.dfs(node.right)
        self.ans =max(self.ans,right+left)
        return max(left+1,right+1)

root = make_tree([1,2,3,4,5])
ob1 = Solution()
print(ob1.diameterOfBinaryTree(root))

इनपुट

[1,2,3,4,5]

आउटपुट

3

  1. पायथन में बाइनरी ट्री इनऑर्डर ट्रैवर्सल पायथन में बाइनरी ट्री इनऑर्डर ट्रैवर्सल

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें रिकर्सन का उपयोग किए बिना इनऑर्डर ट्रैवर्सल योजना का उपयोग करके इस ट्री को पार करना है। इसलिए यदि ट्री इस तरह हैतो ट्रैवर्सल [2,5,7,10,15,20] होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -दो सरणी res और stack बनाएं, curr := root सेट करेंएक अनंत लूप च

  1. पायथन में बाइनरी ट्री उल्टा करें पायथन में बाइनरी ट्री उल्टा करें

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमारा कार्य एक उल्टा बाइनरी ट्री बनाना है। यदि ट्री नीचे जैसा है: उल्टा ट्री इस तरह होगा: इसे हल करने के लिए हम एक पुनरावर्ती दृष्टिकोण का उपयोग करेंगे: यदि रूट null है, तो वापस करें बाएं और दाएं पॉइंटर्स को स्वैप करें बाएं सबट्री और दाएं सबट्री के लिए पुनर

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

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