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

问题描述

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

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

任何提示将不胜感激!

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

class BinaryTreeNode:
    #def __init__(self,value,left=None,right=None):
    def __init__(self,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]

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

发生了什么事? :-(

感谢您的时间!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)