问题描述
对于以下代码,将前缀表达式转换为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 (将#修改为@)