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

Python में दो बाइनरी ट्री के लीफ ट्रैवर्सल के समान होने की जांच कैसे करें?

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

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

Python में दो बाइनरी ट्री के लीफ ट्रैवर्सल के समान होने की जांच कैसे करें?

तो आउटपुट True होगा क्योंकि दोनों ट्री का बायां ट्रैवर्सल अनुक्रम समान है, जो [5, 7, 8] है।

हल करने के चरण

  • s1 := एक नई सूची, s2 := एक और नई सूची
  • r1 को s1 में और r2 को s2 में डालें
  • जब तक s1 और s2 खाली नहीं हैं, तब तक:
    • यदि s1 खाली है या s2 खाली है, तो:
      • False लौटाएं
    • r1_node := s1 का अंतिम नोड, और इसे s1 से हटाएं
    • जब तक r1_node null के समान नहीं है और r1_node लीफ नहीं है, तब तक:
      • यदि r1_node का right null के समान नहीं है, तो:
        • r1_node के right को s1 के अंत में डालें
      • यदि r1_node का left null के समान नहीं है, तो:
        • r1_node के left को s1 के अंत में डालें
        • r1_node := s1 का अंतिम नोड, और इसे s1 से हटाएं
    • r2_node := s2 का अंतिम नोड, और इसे s2 से हटाएं
    • जब तक r2_node null नहीं है और r2_node लीफ नहीं है, तब तक:
      • यदि r2_node का right null नहीं है, तो:
        • r2_node के right को s2 के अंत में डालें
      • यदि r2_node का left null नहीं है, तो:
        • r2_node के left को s2 के अंत में डालें
      • r2_node := s2 का अंतिम नोड, और इसे s2 से हटाएं
    • यदि r1_node null है और r2_node null नहीं है, तो:
      • False लौटाएं
    • यदि r1_node null नहीं है और r2_node null है, तो:
      • False लौटाएं
    • यदि r1_node और r2_node दोनों null नहीं हैं, तो:
      • यदि r1_node का मान r2_node के मान के समान नहीं है, तो:
        • False लौटाएं
  • True लौटाएं

उदाहरण

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = self.right = None
    def is_leaf(self):
        return self.left == None and self.right == None

def solve(r1, r2):
    s1 = []
    s2 = []
    s1.append(r1)
    s2.append(r2)
    while len(s1) != 0 or len(s2) != 0:
        if len(s1) == 0 or len(s2) == 0:
            return False
        r1_node = s1.pop(-1)
        while r1_node != None and not r1_node.is_leaf():
            if r1_node.right != None:
                s1.append(r1_node.right)
            if r1_node.left != None:
                s1.append(r1_node.left)
            r1_node = s1.pop(-1)
        r2_node = s2.pop(-1)
        while r2_node != None and not r2_node.is_leaf():
            if r2_node.right != None:
                s2.append(r2_node.right)
            if r2_node.left != None:
                s2.append(r2_node.left)
            r2_node = s2.pop(-1)
        if r1_node == None and r2_node != None:
            return False
        if r1_node != None and r2_node == None:
            return False
        if r1_node != None and r2_node != None:
            if r1_node.val != r2_node.val:
                return False
    return True

root1 = TreeNode(2)
root1.left = TreeNode(3)
root1.right = TreeNode(4)
root1.left.left = TreeNode(5)
root1.right.left = TreeNode(7)
root1.right.right = TreeNode(8)
root2 = TreeNode(1)
root2.left = TreeNode(6)
root2.right = TreeNode(9)
root2.left.right = TreeNode(5)
root2.right.left = TreeNode(7)
root2.right.right = TreeNode(8)
print(solve(root1, root2))

इनपुट

root1 = TreeNode(2) root1.left = TreeNode(3) root1.right = TreeNode(4) root1.left.left = TreeNode(5) root1.right.left = TreeNode(7) root1.right.right = TreeNode(8) root2 = TreeNode(1) root2.left = TreeNode(6) root2.right = TreeNode(9) root2.left.right = TreeNode(5) root2.right.left = TreeNode(7) root2.right.right = TreeNode(8)

आउटपुट

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

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें इस ट्री का पोस्टऑर्डर ट्रैवर्सल पुनरावृत्त दृष्टिकोण का उपयोग करके ढूंढना है। इसलिए यदि ट्री इस तरह है −तो आउटपुट होगा: [9,15,7,10,-10]इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −यदि रूट null है, तो खाली सरणी लौटाएंएक सरणी ret बनाएंstack := जोड़ी [root

  1. पायथन में रूट टू लीफ पथ में अपर्याप्त नोड्स पायथन में रूट टू लीफ पथ में अपर्याप्त नोड्स

    मान लीजिए हमारे पास एक बाइनरी ट्री है। एक नोड को अपर्याप्त के रूप में जाना जाता है यदि इस नोड को इंटरसेक्ट करने वाला प्रत्येक ऐसा रूट टू लीफ पथ का योग सख्ती से लिमिट से कम है। हमें सभी अपर्याप्त नोड्स को एक साथ हटाना है, और परिणामी बाइनरी ट्री का रूट लौटाना है। इसलिए यदि ट्री इस तरह है, और लिमिट 1 ह

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

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