Python 二叉树迭代有序遍历

Python 二叉树迭代有序遍历,python,algorithm,binary-tree,tree-traversal,Python,Algorithm,Binary Tree,Tree Traversal,我试图实现二叉树的迭代顺序遍历 node.py: class Node: def __init__(self, node=None, left=None, right=None): self.node = node self.left = left self.right = right 在order_traversal.py中: from node import Node def in_order(root): stack

我试图实现二叉树的迭代顺序遍历

node.py:

class Node:
    def __init__(self, node=None, left=None, right=None):
        self.node  = node
        self.left  = left
        self.right = right
在order_traversal.py中:

from node import Node

def in_order(root):
    stack = nodes = []
    while stack or root:
        if root:
            stack.append(root)
            root = root.left
        else:
            current = stack.pop()
            nodes.append(current.node)
            root = current.right
    return nodes


def main():
    '''
    Construct the below binary tree:

            15
           /  \
          /    \
         /      \
        10      20
       /  \    /  \
      8   12  16  25

    '''
    root = Node(15)
    root.left  = Node(10)
    root.right = Node(20)
    root.left.left  = Node(8)
    root.left.right = Node(12)
    root.right.left  = Node(16)
    root.right.right = Node(25)

    print(in_order(root))

if __name__ == '__main__':
    main()
我得到:AttributeError:'int'对象没有属性'node'


如何解决此错误?

stack=nodes=[]
创建对同一列表对象的两个引用。 当您执行
stack.append(root)
nodes.append(current.node)
时,这会影响
stack
节点,因为它们是相同的。您需要的是两个不同的对象:

stack = []
nodes = []

然后您将得到以下输出:
[8、10、12、15、16、20、25]
节点变量的值在代码中初始化为Int(例如节点(5)),您的按顺序方法将该值推送到堆栈上,然后将其弹出并尝试访问其节点变量,这将导致错误

这是一个没有这种错误的实现,它使用递归进行顺序遍历(可以更简单地执行)


请提供预期的价格。显示中间结果与预期结果的偏差。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。给出整个错误消息,包括堆栈跟踪。我们还希望您能够在错误点之前跟踪有问题的值。你在哪里对它们是如何得到这些值感到困惑的?@Prune这里给出的示例对我来说似乎非常简单且可重复…@Prune抱歉,我刚刚在第二个代码块中添加了
import
语句。堆栈跟踪中有3行,我觉得如果完全添加,就没有必要了。我正在尝试实现一个迭代解决方案。
class Node:
    def __init__(self, value, left=None, right=None):
        self.value  = value
        self.left  = left
        self.right = right

def in_order(node):
    nodes = []
    if node.left:
      nodes.extend(in_order(node.left))
    nodes.append(node.value)
    if node.right:
      nodes.extend(in_order(node.right))
    return nodes