微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。