二叉树遍历 - 预购 - 访问父母

时间:2016-10-07 07:09:44

标签: python recursion binary-tree

我正在尝试理解preorder遍历的递归实现,如此链接所示http://interactivepython.org/runestone/static/pythonds/Trees/TreeTraversals.html

def preorder(tree): 
    if tree:  
        print(tree.getRootVal())  
        preorder(tree.getLefChild())  
        preorder(tree.getRightChild())   

我理解预订是如何工作的,但是我慌乱的是上面显示的递归实现。我仍然无法弄清楚在遍历所有左边的孩子后,算法如何回到最近的祖先(父母)。我试过在纸上解决这个问题,但它仍然没有点击。

1 个答案:

答案 0 :(得分:0)

preorder(tree.getLefChild())遍历当前树的所有左子节点。然后,该方法返回,就像所有其他方法一样,然后继续使用父母的正确子项。

快速可视化

def preorder(tree): 
    if tree:  
        print(tree.getRootVal())  
        preorder(tree.getLefChild())  # Expand this
        preorder(tree.getRightChild())  

...变为

def preorder(tree): 
    if tree:  
        print(tree.getRootVal())  
        # Entering recursion ... 
        if (tree.getLefChild()):
            print(tree.getLefChild().getRootVal())  
            preorder(tree.getLefChild().getLefChild())  # And so on...            
            preorder(tree.getLefChild().getRightChild())  
        # Exiting recursion...
        preorder(tree.getRightChild())