对于以下代码,在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?? :-(
谢谢你的时间
目前没有回答
相关问题 更多 >
编程相关推荐