发现了一个错误,修复了它,我不明白为什么它会被窃听?
Found a bug, fixed it , I dont understand why it was bugging?
我遇到了一个错误,现在已经修复了,但我仍然不明白它的根本原因。
我想做的事情:
使用 post-order 树遍历从二叉树中得到 postfix 表达式。该表达式将被 returned 作为列表对象,例如:
给出
的表达式树
"((a+1)+1)"
我希望我的函数 return 以下列表:
["a","1","+","1","+"]
我遇到的问题:
连续多次使用我的函数(称为 postfix)只是 "adds" 最新列表到以前的列表。给定
的表达式树,这就是我的意思
"((a+1)+1)"
写作
postfix( BinaryTree of "((a+1)+1)")
将return
["a","1","+","1","+"]
并在同一棵树上再次调用该函数将 return
["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,[])
似乎可以解决问题。谁能告诉我问题出在哪里,这样我以后就可以避免它了?
在对 postfix() 的所有 3 次调用中,stack[] 都存在于内存中。
因此,每次您使用 append() 时,它只是将根添加到堆栈列表中。
如果您观察输出的第 2 行和第 3 行,这很明显。'a'、'1'、'+'、'1'、'+' 在第一行出现一次,在第二行出现两次第二次和第三次三次。
如果您第四次再次调用该方法 'a','1', '+', '1', '+' 将在 stack[].
中重复 4 次
我遇到了一个错误,现在已经修复了,但我仍然不明白它的根本原因。
我想做的事情:
使用 post-order 树遍历从二叉树中得到 postfix 表达式。该表达式将被 returned 作为列表对象,例如: 给出
的表达式树"((a+1)+1)"
我希望我的函数 return 以下列表:
["a","1","+","1","+"]
我遇到的问题:
连续多次使用我的函数(称为 postfix)只是 "adds" 最新列表到以前的列表。给定
的表达式树,这就是我的意思"((a+1)+1)"
写作
postfix( BinaryTree of "((a+1)+1)")
将return
["a","1","+","1","+"]
并在同一棵树上再次调用该函数将 return
["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,[])
似乎可以解决问题。谁能告诉我问题出在哪里,这样我以后就可以避免它了?
stack[] 都存在于内存中。 因此,每次您使用 append() 时,它只是将根添加到堆栈列表中。
如果您观察输出的第 2 行和第 3 行,这很明显。'a'、'1'、'+'、'1'、'+' 在第一行出现一次,在第二行出现两次第二次和第三次三次。 如果您第四次再次调用该方法 'a','1', '+', '1', '+' 将在 stack[].
中重复 4 次