以下是二进制搜索功能(根有左右孩子),我不太了解。在代码中,它返回一个列表,该列表是二叉树中最长的路径。但是对于这部分:
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
答案 0 :(得分: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([])so list_longest_path(1)= [1] + [2] = [1,2]