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

किसी दिए गए एक्सप्रेशन के एक्सप्रेशन ट्री के निर्माण के लिए पायथन प्रोग्राम

एक्सप्रेशन ट्री वे होते हैं जिनमें लीफ नोड्स के संचालन के लिए मान होते हैं, और आंतरिक नोड्स में वह ऑपरेटर होता है जिस पर लीफ नोड का प्रदर्शन किया जाएगा।

उदाहरण:4 + ((7 + 9) * 2) एक एक्सप्रेशन ट्री होगा जैसे -

किसी दिए गए एक्सप्रेशन के एक्सप्रेशन ट्री के निर्माण के लिए पायथन प्रोग्राम

इस समस्या को हल करने का तरीका

किसी दिए गए एक्सप्रेशन के लिए एक्सप्रेशन ट्री बनाने के लिए, हम आम तौर पर स्टैक डेटा स्ट्रक्चर का उपयोग करते हैं। प्रारंभ में हम दिए गए पोस्टफिक्स एक्सप्रेशन पर पुनरावृति करते हैं और नीचे दिए गए चरणों का पालन करते हैं -

  • अगर हमें दिए गए एक्सप्रेशन में ऑपरेंड मिलता है, तो उसे स्टैक में पुश करें। यह अभिव्यक्ति वृक्ष का मूल बन जाएगा।
  • यदि किसी ऑपरेटर को एक्सप्रेशन में दो मान मिलते हैं, तो एक्सप्रेशन ट्री को उसके बच्चे के रूप में जोड़ें, और उन्हें वर्तमान नोड में पुश करें।
  • चरण-1 और चरण-2 को तब तक दोहराएं जब तक कि हम दिए गए व्यंजक को पूरा न कर लें।

उदाहरण

class stack:
   def __init__(self):
      self.arr = []
   def push(self, data):
      self.arr.append(data)
   def pop(self):
      try:
         return self.arr.pop(-1)
      except:
         pass
   def top(self):
      try:
         return self.arr[-1]
      except:
         pass
   def size(self):
      return len(self.arr)
# node class for expression tree
class node:
   def __init__(self, data):
      self.data = data
      self.left = None
      self.right = None
# expression tree class
class exp_tree:
   def __init__(self, postfix_exp):
      self.exp = postfix_exp
      self.root = None
      self.createTree(self.exp)
   def isOperator(self, char):
      optr = [" ", "-", "*", "/", "^"]
      if char in optr: # if given char is operator
         return True # then return true
      return False # else return false
   def createTree(self, exp):
      s = stack()
      # store those operator node whose any child node is NULL
      self.root = node(exp[-1])
      # last character of postfix expression is always an operator
      s.push(self.root)
      # travel on rest of the postfix expression
      for i in "".join(reversed(exp[:-1])):
         curr_node = s.top()
         if not curr_node.right:
            # if right node of current node is NULL
            temp = node(i)
            curr_node.right = temp
            if self.isOperator(i):
               s.push(temp)
         else: # if left node of current node is NULL
            temp = node(i)
            curr_node.left = temp
            # if no child node of current node is NULL
            s.pop() # pop current from stack
            if self.isOperator(i):
               s.push(temp)
   def inorder(self, head):
      # inorder traversal of expression tree
      # inorder traversal = > left, root, right
      if head.left:
         self.inorder(head.left)
      print(head.data, end=" ")
      if head.right:
         self.inorder(head.right)
   def infixExp(self):
      # inorder traversal of expression tree give infix expression
      self.inorder(self.root)
      print()
if __name__ == "__main__":
   postfixExp = "ab ef*g*-"
   et = exp_tree(postfixExp)
   et.infixExp()

उपरोक्त कोड को चलाने से आउटपुट इस प्रकार उत्पन्न होगा,

आउटपुट

(a + b - e * f * g)

स्पष्टीकरण:

किसी दिए गए एक्सप्रेशन से ट्री बनाने से ऐसा आउटपुट जेनरेट होगा कि ऑपरेंड नोड का रूट बन जाएगा और बाकी नंबर एक्सप्रेशन ट्री के चाइल्ड नोड बन जाएंगे।


  1. पायथन में दिए गए पोस्टऑर्डर से एक बाइनरी सर्च ट्री का निर्माण करें

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

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

    मान लीजिए कि दो खिलाड़ी बाइनरी ट्री पर टर्न-आधारित गेम खेलते हैं। हमारे पास इस बाइनरी ट्री की जड़ है और ट्री में नोड्स की संख्या n है। यहां n विषम है, और प्रत्येक नोड का 1 से n तक का एक अलग मान है। सबसे पहले, पहला खिलाड़ी 1 <=x <=n के साथ एक मान x का नाम देता है, और दूसरा खिलाड़ी 1 <=y <=n के साथ एक

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

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