如何进行树遍历?
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
所以这不应该保证我的 Node
有 left
和 right
.
我只展示我实现的 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.inOrder
和 self.right.inOrder
?
self
不是 None
。 self
指的是 class 的一个实例。 self.left
是您在创建实例时在 __init__()
方法中设置为 None
的实例属性。因为 self.left
引用 None
并且对象 None
没有 inOrder()
方法,所以您获得了 AttributeError
。在您的 class 定义中,self
(指的是 class 的实例)确实具有 inOrder()
方法,但它的属性 self.left
(指的是 None
), 没有。
所以我 运行 陷入了一些让我目瞪口呆的问题。我不明白我的代码哪里出错了,但我的想法是检查我所在的当前节点是否是 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
所以这不应该保证我的 Node
有 left
和 right
.
我只展示我实现的 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.inOrder
和 self.right.inOrder
?
self
不是 None
。 self
指的是 class 的一个实例。 self.left
是您在创建实例时在 __init__()
方法中设置为 None
的实例属性。因为 self.left
引用 None
并且对象 None
没有 inOrder()
方法,所以您获得了 AttributeError
。在您的 class 定义中,self
(指的是 class 的实例)确实具有 inOrder()
方法,但它的属性 self.left
(指的是 None
), 没有。