定义一个函数sum_to_deepest(root)
,它返回从根到最深叶子的键的总和,以root为根。如果有两个最深的叶子,则返回较大的总和;如果根是None,则返回0。
在这个问题中,你会发现定义一个辅助函数是有帮助的,它返回最深叶子的深度和沿叶子路径的总和。
答案 0 :(得分:6)
你应该真的不要在这里问答答案。先尝试一下。我只会给你提示和伪代码。
节点具有属性left, right, key
。
为了计算高度,你可以递归地进行。您需要使用左右子树的较大高度并添加1.
想象
A
/ \
B C
/
D
伪代码:
height(node)->
if(node is a leaf) return 0
return maximum(height(left subtree), height(right subtree)) + 1
从A开始,
height(A) -> maximum(height(B), height(C) + 1
height(B) -> maximum(height(D), null) + 1
height(D) -> 0
height(B) -> 1
height(C) -> 0
height(A) -> maximum(1, 0) + 1 = 2
要获得总和,您需要确定树下面的哪条路径可以让您到达最深的叶子。最深的叶子的高度将沿着具有更高高度的子树的路径,所以像这样(伪代码):
sum_to_deepest(node) ->
if(node is null) return 0
leftheight = height(left subtree)
rightheight = height(right subtree)
if(leftheight > rightheight) then
return (current key) + sum_to_deepest(left subtree)
return (current key) + sum_to_deepest(right subtree)