如何进行树遍历?

How to do tree traversal?

所以我 运行 陷入了一些让我目瞪口呆的问题。我不明白我的代码哪里出错了,但我的想法是检查我所在的当前节点是否是 None,如果是,那么我 return 我的树列表订购预购post订购。这是我的代码:

class Node:
  def __init__(self, data):
    self.data = data
    self.left = None
    self.right = None

  def inOrder(self, arr=[]):
    if self is not None:
      self.left.inOrder(arr)
      arr.append(self.data)
      self.right.inOrder(arr)

    return arr

当我 运行 它时,我得到一个 self.left.inOrder() AttributeError: 'NoneType' object has no attribute 'inOrder' 错误,我不知道为什么。我正在检查 self is not None 所以这不应该保证我的 Nodeleftright.

我只展示我实现的 inOrder

我已经通过执行以下操作解决了这个问题

class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

    def inOrder(self):
        if self is not None and self.left is not None:
            self.left.inOrder()

        print(self.data)

        if self is not None and self.right is not None:
            self.right.inOrder()


root = Node(1)
root.left = Node(2)
root.right = Node(3)


root.inOrder()

无论我是将它保存到列表中还是只是打印它对我来说都很好,但是如果我已经检查过 self 是否不是 None 那么我不应该调用 self.left.inOrderself.right.inOrder?

self 不是 Noneself 指的是 class 的一个实例。 self.left 是您在创建实例时在 __init__() 方法中设置为 None 的实例属性。因为 self.left 引用 None 并且对象 None 没有 inOrder() 方法,所以您获得了 AttributeError。在您的 class 定义中,self(指的是 class 的实例)确实具有 inOrder() 方法,但它的属性 self.left(指的是 None), 没有。