【发布时间】:2013-07-01 06:03:37
【问题描述】:
我对计算二叉树高度的逻辑有些困惑。
代码 1
public static int findHeight(Tree node) {
if(node == null)
return 0;
else {
return 1+Math.max(findHeight(node.left), findHeight(node.right));
}
}
代码 2
public static int findHeight(Tree node) {
if(node == null)
return -1;
else {
return 1+Math.max(findHeight(node.left), findHeight(node.right));
}
}
我认为,第二个是正确的,因为它给出了以下代码的正确答案:-
Tree t4 = new Tree(4);
Tree t2 = new Tree(2);
Tree t1 = new Tree(1);
Tree t3 = new Tree(3);
Tree t5 = new Tree(5);
t4.left = t2;
t4.right = t5;
t2.left = t1;
t2.right = t3;
// Prints "Height : 2" for Code 2
// Prints "Height : 3" for Code 1
System.out.println("Height : " + findHeight(t4));
我很困惑,因为许多其他 SO 答案显示了根据代码 1 计算高度的逻辑
矛盾的逻辑
更新:
所有,我对树的高度到底是多少有一个基本的疑问?
1.是树的根节点和最深节点之间的节点数吗(包括根节点和最深节点)?
2。是树的根节点和最深节点之间的边数吗?
或
3。是否只是每个人的执行问题 - 两种方法都是正确的?
【问题讨论】:
-
但是没有问题..
-
这是一个完全任意的定义。您希望高度是边数还是节点数?只要你坚持不懈,一切都会好起来的。
-
谢谢子瑶……您提供的链接澄清了我的疑问。
标签: java algorithm data-structures tree binary-tree