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

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

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

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

अगर to_delete सरणी [3,5] की तरह है, तो आउटपुट होगा

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

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

  • एक सरणी रेस परिभाषित करें
  • एक विधि हल करें () को परिभाषित करें, यह नोड, to_delete सरणी और एक बूलियन प्रकार की जानकारी लेगा जो बता रही है कि नोड रूट है या नहीं। विधि नीचे की तरह काम करेगी-
  • यदि नोड शून्य है, तो शून्य वापस आएं
  • ध्वज:=सत्य यदि नोड का मान to_delete सरणी में है
  • यदि ध्वज गलत है और is_root सत्य है, तो नोड को रेस में डालें
  • नोड के बाएँ:=हल करें (नोड के बाएँ, to_delete, फ़्लैग)
  • नोड का अधिकार:=हल करें(नोड का अधिकार, to_delete, ध्वज)
  • झंडा सेट होने पर कोई नहीं लौटाएं, अन्यथा झूठा
  • हल (नोड, 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 के बीच सबसे बड़ा पूर्ण अंतर है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक फ़ंक्शन को परिभाषित करें dfs() ।

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

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

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

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