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

पायथन में नोड्स हटाएं और फॉरेस्ट लौटाएं


मान लीजिए हमारे पास एक बाइनरी ट्री का रूट है, ट्री में प्रत्येक नोड का एक यूनिक मान है। to_delete में मान वाले सभी नोड्स को हटाने के बाद, हमें एक फॉरेस्ट बचा है। हमें शेष फॉरेस्ट में ट्रीज के रूट्स ढूंढने हैं। इसलिए यदि इनपुट इस तरह है

पायथन में नोड्स हटाएं और फॉरेस्ट लौटाएं

यदि to_delete ऐरे [3,5] जैसा है, तो आउटपुट होगा

पायथन में नोड्स हटाएं और फॉरेस्ट लौटाएं

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

  • res नामक एक ऐरे परिभाषित करें
  • solve() नामक एक मेथड परिभाषित करें, यह node, to_delete ऐरे और एक बूलियन टाइप info लेगा जो बता रहा है कि नोड रूट है या नहीं। मेथड नीचे की तरह कार्य करेगा -
  • यदि node null है, तो null लौटाएं
  • flag := true यदि नोड का मान to_delete ऐरे में है
  • यदि flag false है और is_root true है, तो node को res में इन्सर्ट करें
  • node का बायां := solve(node का बायां, to_delete, flag)
  • node का दायां := solve(node का दायां, to_delete, flag)
  • flag सेट होने पर none लौटाएं, अन्यथा false
  • मुख्य मेथड से solve() मेथड को इस तरह कॉल करें solve(node, to_delete, true)

उदाहरण

class Solution(object):
    def delNodes(self, root, to_delete):
        \"\"\"
        :type root: TreeNode
        :type to_delete: List[int]
        :rtype: List[TreeNode]
        \"\"\"
        to_delete = set(to_delete)
        self.res = []
        self.solve(root,to_delete,True)
        return self.res
    def solve(self,node,to_delete,is_root):
        if not node:
            return None
        flag = node.val in to_delete
        if not flag and is_root:
            self.res.append(node)
        node.left = self.solve(node.left,to_delete,flag)
        node.right = self.solve(node.right,to_delete,flag)
        return None if flag else node

इनपुट

[1,2,3,4,5,6,7] [3,5]

आउटपुट

[[1,2,null,4],[6],[7]]

  1. पायथन में नोड और उसके वंशज के बीच अंतर खोजने का प्रोग्राम पायथन में नोड और उसके वंशज के बीच अंतर खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें किसी भी नोड और उसके वंशजों के बीच सबसे बड़ा निरपेक्ष अंतर ढूंढना है।उदाहरण के लिए, यदि इनपुट ट्री है:तो आउटपुट 7 होगा क्योंकि सबसे बड़ा निरपेक्ष अंतर नोड्स 8 और 1 के बीच है।समाधान दृष्टिकोणइसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे (पोस्ट-ऑर्डर

  1. पायथन में बाइनरी ट्री के लीफ और नॉन-लीफ नोड्स खोजने का प्रोग्राम पायथन में बाइनरी ट्री के लीफ और नॉन-लीफ नोड्स खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें दो संख्याओं की एक सूची ढूंढनी है जहां पहली संख्या ट्री में पत्तियों की संख्या है और दूसरी संख्या गैर-पत्ती नोड्स की संख्या है।इसलिए, यदि इनपुट इस तरह हैतो आउटपुट (3, 2) होगा, क्योंकि 3 पत्तियां और 2 गैर-पत्ती नोड्स हैं।इसे हल करने के लिए, हम इन चरणों का पा

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

    मान लीजिए हमारे पास दो ट्रैवर्सल अनुक्रम प्रीऑर्डर और पोस्टऑर्डर हैं, हमें इन दो अनुक्रमों से बाइनरी ट्री उत्पन्न करना है। इसलिए यदि अनुक्रम [1,2,4,5,3,6,7], [4,5,2,6,7,3,1] हैं, तो आउटपुट होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - ans := pre[0] मान लेकर एक ट्री नोड बनाएं, stack := खा