在 Python 3 中走 BST

Walking a BST in Python 3

谁能解释一下计算机是如何到达 walkTree(tree['right']) 的?我相信该函数一直调用自身直到 None 然后递归弹出所有 "left" 堆栈并打印它们,但是当函数调用 walkTree(tree['right']) 时,计算机在做什么又路过walkTree(tree['left'])

def walkTree(tree):
    if tree == None:
        return None
    walkTree(tree['left']
    print(tree['data'])
    walkTree(tree['right'])

BST 是一种递归数据结构。 当您使用 'left' 值调用函数时,它将转到 BST 的左半部分。然后递归并继续,直到它到达树中最左边的节点。 然后它开始向上移动并转到其父节点(最左边节点的父节点)的右子树。然后同样的过程再次继续,它首先访问左子树并以这种方式进行。 当它在返回时最终到达整棵树的根时(在访问了左半部分的所有节点之后),就该访问右子树了。然后,如果存在的话,它会再次转到该根的左子树(绝对根的右侧)。这棵左子树不是主树的左子树,而是主根的右节点。

您的代码基本上会按升序打印整个 BST 中的值。 另外我觉得应该是

if tree == None:
    return

听起来你不明白调用堆栈是如何工作的。 拿一棵简单的树:

   2
  / \
 1   3

调用堆栈看起来像(使用缩进来指示调用堆栈中的级别):

walkTree(tree)
    walkTree(left)
        walkTree(left)
            return
        print(1)
        walkTree(right)
            return
        return (implicit)
    print(2)
    walkTree(right)
        walkTree(left)
            return
        print(3)
        walkTree(right)
            return
        return (implicit)
    return (implicit)

A​​ return 位于调用堆栈的底部 returns 到更高一层的调用堆栈,而不是一直到顶部。