我遇到了一个现已修复的错误,但我仍然不明白它的根本原因。
我想做什么:
使用后序树遍历从二叉树中获取后缀表达式。此表达式将作为列表对象返回,例如: 给出
的表达式树"((a+1)+1)"
我希望我的函数返回以下列表:
["a","1","+","1","+"]
我遇到的问题:
连续几次使用我的函数(称为postfix)只是将最新列表“添加”到之前的列表中。这是我给出
的表达式树的意思"((a+1)+1)"
写作
postfix( BinaryTree of "((a+1)+1)")
将返回
["a","1","+","1","+"]
再次在同一棵树上调用该函数将返回
["a","1","+","1","+","a","1","+","1","+"]
有人可以向我解释为什么会这样吗?这是我的其余代码
class BinaryTree:
def __init__(self,rootVal,leftBinaryTree=None,rightBinaryTree=None):
self.key = rootVal
self.left = leftBinaryTree
self.right = rightBinaryTree
def getRootVal(self):
return self.key
def getLeftChild(self):
return self.left
def getRightChild(self):
return self.right
""" Tree Traversal """
def postorder(tree):
if tree != None:
postorder(tree.getLeftChild())
postorder(tree.getRightChild())
print(tree.getRootVal())
""" posfix from tree """
def postfix(tree,stack = []):
if tree!=None:
postfix(tree.getLeftChild(),stack)
postfix(tree.getRightChild(),stack)
stack.append(tree.getRootVal())
return stack
expression = "((a+1)+1)"
tree = BinaryTree("+",BinaryTree("+",BinaryTree("a"),BinaryTree("1")),BinaryTree("1"))
print(postfix(tree))
print(postfix(tree))
print(postfix(tree))
使用以下输出
['a', '1', '+', '1', '+']
['a', '1', '+', '1', '+', 'a', '1', '+', '1', '+']
['a', '1', '+', '1', '+', 'a', '1', '+', '1', '+', 'a', '1', '+', '1', '+'
我在写出来的时候发现了明确使用
postfix(tree,[])
似乎解决了这个问题。有人能告诉我问题是什么,以后我可以避免它吗?
答案 0 :(得分:0)
stack []存在于内存中。 因此,每次使用append()时,只需将根添加到堆栈列表中。
如果您观察输出的第2行和第3行,这很明显。' a',' 1',' +',' 1',' +'在第一行中出现一次,在第二行中出现两次,在第三行中出现三次。 如果您是第四次再次拨打该方法,请'' 1',' +',' 1',&# 39; +'将在堆栈中重复4次。