【发布时间】:2019-04-17 23:49:09
【问题描述】:
我知道这是一个非常基本的问题,我在网上找到了示例代码,但我无法弄清楚它为什么会起作用。
如果我们需要以预序方式遍历二叉树,其中一种方法(在此引用 http://interactivepython.org/courselib/static/pythonds/Trees/TreeTraversals.html)是使用类似的方法:
def preorder(self):
print(self.key)
if self.leftChild:
self.leftChild.preorder()
if self.rightChild:
self.rightChild.preorder()
我不明白为什么可以做类似self.leftChild.preorder() 的事情。如果有人能指出我正确的方向,我将不胜感激。
编辑:
按照 cmets 中的建议,我发布了我正在处理的完整代码。我是从 firecode 那里得到的:
post_ordered_list = []
class BinaryTree:
def __init__(self, root_data):
self.data = root_data
self.left_child = None
self.right_child = None
def postorder(self):
if self.left_child:
self.left_child.postorder()
if self.right_child:
self.right_child.postorder()
post_ordered_list.append(self.data)
return post_ordered_list
def get_right_child(self):
return self.right_child
def get_left_child(self):
return self.left_child
def set_root_val(self, obj):
self.data = obj
def get_root_val(self):
return self.data
【问题讨论】:
-
您可能需要在问题中包含类定义,以便我们理解其中一种方法
-
添加了全班
-
你不明白的地方能不能具体点?为什么
self.leftChild.preorder()不可能? -
是的。为什么
self.leftChild.preorder()有效? LeftChild 是一个实例属性,对吗?它如何连接到预购方法? -
代码中未显示但几乎可以肯定的是
self.leftChild和self.rightChild本身就是BinaryTree的实例,因此它们也有一个preorder()方法。
标签: python class oop data-structures