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

Python Program: दिए गए Expression का Expression Tree Construct करें

Expression trees वे होते हैं जिनमें leaf nodes में operate किए जाने वाले values होते हैं, और internal nodes में operator होता है जिस पर leaf node perform किया जाएगा।

उदाहरण: 4 + ((7 + 9) * 2) का expression tree ऐसा होगा -

Python Program: दिए गए Expression का Expression Tree Construct करें

Problem हल करने का दृष्टिकोण

दिए गए expression के लिए Expression Tree construct करने के लिए, हम generally Stack Data Structure का उपयोग करते हैं। Initially हम दिए गए postfix expression पर iterate करते हैं और नीचे दिए गए steps का पालन करते हैं:

  • यदि हमें दिए गए expression में operand मिलता है, तो उसे stack में push करें। यह expression Tree का root बनेगा।
  • यदि operator को expression में दो values मिलते हैं, तो उन्हें expression tree में child के रूप में add करें, और current node में push करें।
  • Step-1 और Step-2 को तब तक repeat करें जब तक हम अपने दिए गए expression पर complete नहीं कर लेते।

उदाहरण

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()

उपरोक्त code चलाने से output generate होगा:

आउटपुट

(a + b - e * f * g)

व्याख्या:

दिए गए expression से tree construct करने से output generate होगा जैसे कि operand node का root बनेगा और बाकी numbers expression tree के child nodes बनेंगे।

  1. पायथन में पोस्टऑर्डर से बाइनरी सर्च ट्री बनाना पायथन में पोस्टऑर्डर से बाइनरी सर्च ट्री बनाना

    समस्या विवरण बाइनरी सर्च ट्री का पोस्टऑर्डर ट्रैवर्सल दिया गया है, ट्री पुनर्निर्मित करें। BST के लिए इनऑर्डर = सॉर्टेड पोस्टऑर्डर होता है। उदाहरण पोस्टऑर्डर: [3, 9, 20, 15, 7] इनऑर्डर (सॉर्टेड): [3, 7, 9, 15, 20] आउटपुट (इनऑर्डर): 3, 7, 9, 15, 20 एल्गोरिदम inorder = sorted(postorder) सामान्य बाइ

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

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

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

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