【问题标题】:Confused - Height of Binary tree困惑 - 二叉树的高度
【发布时间】: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


【解决方案1】:

如果您对高度的理解是(1 个根节点的高度为 1,有一个或两个子节点的根节点是高度为 2 等)

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

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

所以代码 1 是对的 :))

【讨论】:

  • 第二个是正确的,但在许多情况下,开发人员在实现高度时会使用第一个。所以答案是 3 :))
【解决方案2】:

区别在于空树的高度是-1还是0。

根据Wikipedia

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

根节点的深度为零,叶节点的高度为零,只有一个节点的树(因此同时具有根和叶)的深度和高度为零。按照惯例,一棵空树(没有节点的树,如果允许的话)的深度和高度为 -1。

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

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

【讨论】:

  • 路径的长度是边数,所以我会说 2。
  • 但是,根据许多 SO 用户(包括 Jon Skeet)stackoverflow.com/q/5763854/2546848 所说的代码 1,这将导致我上面的代码的答案不正确.. 不是吗?
  • 这些定义可以有很大的不同——甚至像 CLRS 和 Knuth 这样的书籍有时也有不同的定义。此外,乔恩也可能(很少)不准确 - 这是大多数人可能已经忘记的定义(我确实忘记了)。
  • 这两种方法的使用是否正确?取决于场景?
  • 不要把它们混在一起,你应该大部分时间都很好——当然,某些公式可能会因一个定义而变得更丑陋。例如,Wiki 定义的最大节点数为 2 ^ n - 1,其他版本的最大节点数为 2 ^ (n - 1) - 1。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多