【发布时间】:2015-12-31 10:13:14
【问题描述】:
给出求二叉树高度的代码:
/*
class Node
int data;
Node left;
Node right;
*/
int height(Node root)
{
if(root == null){
return 0;
}
else{
int left = height(root.left);
int right = height(root.right);
if(left > right){
return 1 + left;
}
else{
return 1 + right;
}
}
}
例子是:
3
/ \
5 2
/ \ /
1 4 6
/
7
高度为 4 因为3->2->6->7
我在理解这里的递归过程时遇到了很大的麻烦。如果有人向我解释以下问题,我将不胜感激:
1) 在遍历树的时候,以下两行是否在每次访问节点时加1?更大的问题:它是如何工作的?
int left = height(root.left);
int right = height(root.right);
2) 我理解正确吗?:
int left = height(root.left); ---> 一直到 leftmost 节点??
int right = height(root.right); ---> 一直到 最右边 节点 ??
如果我有以下树会发生什么:
3
/ \
5 2
/ \ /
1 4 6
/ /
3 7
/
2
因为3->5->4->3->2,高度会是5?
我很难理解这些行的递归:
int left = height(root.left);
int right = height(root.right);
我对这些行的理解是 left 转到最左边的节点,而 right 转到最右边的节点。
提前致谢!
【问题讨论】:
-
我建议您在调试器中单步调试代码。这是一个非常简单的函数,在你看到代码如何实际运行之前,我认为你无法完全理解它。
-
您已经计算出,如果
left只转到最左边的节点,则此功能将不起作用,但确实有效,因此您知道这不可能是正确的。