Python表达式树只能包含三个值

2024-04-25 05:59:37 发布

您现在位置:Python中文网/ 问答频道 /正文

对于以下代码,在python中将前缀表达式转换为表达式树

我试图通过从左到右遍历表达式树,将前缀表达式转换为inflix表达式。如果表达式中只有三个值(即“+1 2”),则该代码有效。但是输出列表最多只能包含三项

任何提示都将不胜感激

ops = ['+','-','*','/']

class BinaryTreeNode:
    #def __init__(self, value, left=None, right=None):
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right

    def __str__(self):
        return str(self.value)

class BinarySearchTree:
    
    def __init__(self):
       self.root = None
        
    def __str__(self):
        return str(self.value)    
    
    def add(self,value):
        if self.root is None:
            self.root = BinaryTreeNode(value)
            
        else:
            #pointer set at root if root not empty
            ptr = self.root
            while True:
               
                if value in ops:
                    ptr = self.root
                    #if left of pointer is empty, add new Node
                    if ptr.left is None:
                        ptr.left = BinaryTreeNode(value)
                        break
                        #set pointer to new Node
                        ptr = ptr.left
                        
                        
                    #left of pointer is not empty, add right node
                    else:
                        # return pointer to root
                        #ptr = self.root
                        ptr.right = BinaryTreeNode(value)
                        break
                        # reset pointer to new Node
                        ptr = ptr.right                        
                
                #if value not in ops
                else:
                    if ptr.left is None:
                        ptr.left = BinaryTreeNode(value)
                        ptr = ptr.left
                        break
                    
                    else:
                        ptr.right = BinaryTreeNode(value)
                        ptr = ptr.right
                        break
                

    def in_order(self):
        def traverse(node):
            if node.left is not None:
                yield from traverse(node.left)
            yield node.value
           
            
            if node.right is not None:
                yield from traverse(node.right)

            
            
        return traverse(self.root)

exp = "+ 1 2"

split = exp.split()

bst = BinarySearchTree()

for i in split:
    bst.add(i)

print(list(bst.in_order()))

输入:"+ 1 2" 输出:[1, +, 2]

good

输入:"+ / 1 2 * 3 4" 输出:[/, +, 4]

what happened?? :-(

谢谢你的时间


Tags: selfrightnonenodeifisvalue表达式