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

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

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

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

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

  • उत्तर:=पूर्व [0] मान लेकर एक ट्री नोड बनाएं, स्टैक:=खाली स्टैक, और उत्तर डालें
  • i :=1 और j :=0
  • जबकि मैं <पूर्व की लंबाई और j <पोस्ट की लंबाई
    • यदि स्टैक का शीर्ष मान =पोस्ट[j] है, तो j को 1 से बढ़ाएं, स्टैक से पॉप करें, और अगले पुनरावृत्ति के लिए जाएं
    • नोड :=पूर्व [i] मान के साथ एक ट्री नोड बनाएं
    • यदि स्टैक टॉप नोड का बायां भाग खाली है, तो स्टैक टॉप नोड के बाईं ओर नोड के रूप में सेट करें, अन्यथा स्टैक टॉप नोड के दाएं को नोड के रूप में सेट करें
    • स्टैक में नोड डालें
    • मैं 1 से बढ़ाएँ
  • वापसी उत्तर

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

उदाहरण

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
def height(root):
   if root is None:
      return 0
   else :
      # Compute the height of left and right subtree
      l_height = height(root.left)
      r_height = height(root.right)
      #Find the greater one, and return it
      if l_height > r_height :
         return l_height+1
      else:
         return r_height+1
def print_given_level(root, level):
   if root is None:
      return
   if level == 1:
      print(root.data,end = ',')
   elif level > 1 :
      print_given_level(root.left , level-1)
      print_given_level(root.right , level-1)
def level_order(root):
   print('[', end = '')
   h = height(root)
   for i in range(1, h+1):
      print_given_level(root, i)
   print(']')
class Solution(object):
   def constructFromPrePost(self, pre, post):
      """
      :type pre: List[int]
      :type post: List[int]
      :rtype: TreeNode
      """
      ans = TreeNode(pre[0])
      stack = [ans]
      i = 1
      j = 0
      while i < len(pre) and j < len(post):
         if stack[-1].data == post[j]:
            j+=1
            stack.pop(-1)
            continue
         node = TreeNode(pre[i])
         if not stack[-1].left:
            stack[-1].left = node
         else:
            stack[-1].right = node
            stack.append(node)
            i+=1
   return ans
ob = Solution()
pre = [1,2,4,5,3,6,7]
post = [4,5,2,6,7,3,1]
tree = ob.constructFromPrePost(pre, post)
level_order(tree)

इनपुट

[1,2,4,5,3,6,7]
[4,5,2,6,7,3,1]
pre = [1,2,4,5,3,6,7]
post = [4,5,2,6,7,3,1]

आउटपुट

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

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

    मान लीजिए कि हमारे पास बाइनरी ट्री का इनऑर्डर और पोस्टऑर्डर ट्रैवर्सल सीक्वेंस है। हमें इन अनुक्रमों से वृक्ष उत्पन्न करना है। तो अगर पोस्टऑर्डर और इनऑर्डर अनुक्रम [9,15,7,20,3] और [9,3,15,20,7] हैं, तो पेड़ होगा - आइए चरणों को देखें - मान लीजिए कि विधि को प्रीऑर्डर और इनऑर्डर सूचियों के साथ बिल

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

    मान लीजिए कि हमारे पास एक बाइनरी ट्री का इनऑर्डर और प्रीऑर्डर ट्रैवर्सल सीक्वेंस है। हमें इन अनुक्रमों से वृक्ष उत्पन्न करना है। तो अगर प्रीऑर्डर और इनऑर्डर अनुक्रम [3,9,20,15,7] और [9,3,15,20,7] हैं, तो ट्री होगा - आइए चरणों को देखें - मान लीजिए कि विधि को प्रीऑर्डर और इनऑर्डर सूचियों के साथ बि

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

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