public static int findHeight(Tree root) {
int leftHeight, rightHeight;
if (root == null) {
return 0;
}
leftHeight = 1 + findHeight(root.left);
rightHeight = 1 + findHeight(root.right);
return leftHeight > rightHeight ? leftHeight : rightHeight;
}
我的困惑在于变量leftHeight和rightHeight。这行上的递归调用究竟添加了什么?
leftHeight = 1 + findHeight(root.left);
findHeight(root.left)在那时没有返回任何值,那么会在那里添加什么?或者它是否为每个递归调用总结了leftHeight?如果是这样,那怎么办?
答案 0 :(得分:0)
我总是建议在编码时用纸和笔坐着,这有助于放下你的逻辑。
对于上面的代码段,让我们考虑如下示例: -
3
/ \
2 4
/
1
现在,当对此树的调用看起来像
时-> findHeight(3) -> findHeight(2) -> findHeight(1)
\-> findHeight(4)
Now have a clear look,
findHeight(1) will return 1;
findHeight(2) will return 1 + findHeight(1) = 2
findHeight(4) will return 1 + 0 (NULL) = 1
findHeight(3) will return 1 + max(2,1) = 3
希望这有助于您了解递归流程。