困惑 - 二叉树的高度

时间:2013-07-03 13:51:10

标签: java algorithm data-structures tree binary-tree

我对计算二叉树高度的逻辑感到有些困惑。

代码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。是树的根节点和最深节点之间的边缘是否为<?strong>

OR

第3。这只是每个人实施的问题 - 这两种方法都是正确的吗?

3 个答案:

答案 0 :(得分:6)

如果空树的高度为-1或0,则差异都在于。

根据Wikipedia

  

节点的高度是从该节点到叶子的最长向下路径的长度。根的高度是树的高度。节点的深度是到其根的路径的长度(即,其根路径)。

  

根节点的深度为零,叶节点的高度为零,只有一个节点的树(因此根和叶)的深度和高度为零。通常,空树(没有节点的树,如果允许的话)具有深度和高度-1。

所以你可能是对的 - 第二个人同意这一点。

当然,这些都是定义 - 我不会太惊讶于看到与第一个版本一致的定义。

答案 1 :(得分:0)

你的例子是高3(t4是根,t4.left是t2,t2.left是t1),如果你对高度的理解是(1根节点是高度1,根节点有一个或两个子节点是高度2等)

t4.left = t2;
t4.right = t5;

t2.left = t1;
t2.right = t3;

所以代码1是对的:))

答案 2 :(得分:0)

代码0将根计为高度1(根应为0)。这意味着所有后续的树将是一个太多