【发布时间】:2021-05-04 08:18:19
【问题描述】:
我目前正在研究二叉树。我遇到了这个非常有效的遍历树的代码(在示例中这是一个按顺序遍历)。它使用递归,这是我理解的一个概念。 但是,我似乎无法理解这实际上是如何工作的。我主要感到困惑的是它是如何每次都出现在列表中的,所以 start.left 并不总是相同的数字。 有人可以逐步说明这实际上是如何遍历树的。提前致谢
已编辑以增加问题的清晰度:
- 我知道如果 start 不是 None,那么 start.left 会被添加到同一函数的递归调用中。
- 每次递归时,都会将变量遍历分配给函数的返回值。
- 当 start 最终为 None(遍历已完成)时,函数返回遍历元素,并继续该过程。
我的困惑是,我似乎无法找到代码在哪里,“知道”它遍历到 4,现在要返回的下一个元素是 2。机制在哪里,现在停止在 2 并返回它,等等?
class Node():
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def __str__(self):
return str(self.data)
class BinaryTree(object):
def __init__(self, root):
self.root = Node(root)
def inorder_print(self, start, traversal):
"""Left -> root -> right"""
if start:
traversal = self.inorder_print(start.left, traversal)
traversal += (str(start.data) + "-")
traversal = self.inorder_print(start.right, traversal)
return traversal
tree = BinaryTree(1)
tree.root.left = Node(2)
tree.root.right = Node(3)
tree.root.left.left = Node(4)
tree.root.left.right = Node(5)
tree.root.right.left = Node(6)
tree.root.right.right = Node(7)
tree.root.right.right.right = Node(8)
print(tree.inorder_print(tree.root, ""))
【问题讨论】:
-
它在执行
return时上升。这是一个很模糊的问题。您能否尽可能一步一步地添加解释,然后准确指出在此遍历中您不了解下一步的确切位置? -
那里有很多中序遍历的解释。我建议只用谷歌搜索它
标签: python recursion binary-tree