【问题标题】:How to comprehend the following recursive function in binary tree?如何理解二叉树中的以下递归函数?
【发布时间】:2016-08-16 19:38:59
【问题描述】:

下面是一个我不太理解的二分搜索函数(一个根有一个左子和一个右子)。在代码中,它返回一个列表,该列表是二叉树中最长的路径。但是对于这部分: return_path_left = list_longest_path(node.left) return_path_right = list_longest_path(node.right) if len(return_path_left) > len(return_path_right):

你如何比较两个递归调用?例如,如果树是

1 / \ 2 list_longest_path(node.right) 肯定会返回 []。但是你如何比较list_longest_path(2)[]

有人帮助会很棒。

def list_longest_path(node):
    """
    List the data in a longest path of node.

    @param BinaryTree|None node: tree to list longest path of
    @rtype: list[object]

    >>> list_longest_path(None)
    []
    >>> list_longest_path(BinaryTree(5))
    [5]
    >>> b1 = BinaryTree(7)
    >>> b2 = BinaryTree(3, BinaryTree(2), None)
    >>> b3 = BinaryTree(5, b2, b1)
    >>> list_longest_path(b3)
    [5, 3, 2]
    """
    if node is None:
        return []
    else:
        return_path_left = list_longest_path(node.left)
        return_path_right = list_longest_path(node.right)
        if len(return_path_left) > len(return_path_right):
            return [node.data] + return_path_left
        else:
            return [node.data] + return_path_right

【问题讨论】:

    标签: python python-3.x recursion binary-tree binary-search-tree


    【解决方案1】:

    list_longest_path(node.right) 肯定会返回 []。但是你怎么 比较 list_longest_path(2) 和 []?

    当遇到像 list_longest_path(2) 这样的递归调用时,它会被压入调用堆栈。由于调用堆栈是一个堆栈[因此是后进先出],当前堆栈帧被暂停并评估 list_longest_path(2)。

    list_longest_path(2) 的评估方式如下:

    由于左右节点都是None,return_path_left = []; return_path_right = [];所以 list_longest_path(2) = [2] + [] = [2]

    然后 list_longest_path(2) 堆栈帧从堆栈中弹出,程序在前一个堆栈帧中恢复执行。我们现在有一个 list_longest_path(2) = [2] 的简单值 然后我们完成了这个函数的执行 len([2]) > len([]) 所以 list_longest_path(1) = [1] + [2] = [1,2]

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 2021-03-30
      • 2019-09-09
      • 2016-07-24
      相关资源
      最近更新 更多