当前位置: 首页 > 知识库问答 >
问题:

有人能给我解释一下这个二叉搜索树高度函数吗?

权浩邈
2023-03-14

所以我一直在看这个函数,它对我来说毫无意义。

int findHeight(BinaryNode<E> aNode)
{
    if(aNode ==null){
          return -1;
    }


    int lefth = findHeight(aNode.left);
    int righth = findHeight(aNode.right);

    if(lefth > righth)
        return lefth + 1;
    else
        return righth +1;
}

假设我有一棵由一个根组成的树,它只剩下一个孩子。所以root->leftchild。

共有1个答案

羊舌富
2023-03-14

这是一个递归函数(它自己叫)。要理解它是如何工作的,您首先必须可视化它的作用。

首先,将每个BinaryNode视为新子树的根。您可以对树中的任何节点调用findheight,它将返回该子树的高度。

函数执行时,它调用自己来查找子树中每个左右节点的高度。只要该节点不是null(表示树的叶子),它就会继续沿着分支行进,直到到达一个为null的节点,此时它将返回一个值-1(因为null节点不计算为树的高度的一部分)。

然后,它将开始returning将树备份到根节点。当它从分支中的每个节点返回时,它将在返回值上加1。当它到达顶部时,返回的是最长分支中所有高度的总和(这就是if语句存在的原因)。

 类似资料:
  • 我是Hibernate和JPA的新手,我对这个注释有问题。有人能简单地解释一下这个注释到底在做什么吗?因为在这种情况下,文档对我来说很难理解。 编辑我明白什么是持久上下文,但在代码中,我有这样的例子: 我对@PerustenceContext做什么有问题。抱歉,也许我没有具体说明。

  • 我这里有一些关于Java的练习问题。我们应该在不使用编译器的情况下确定答案。 参考以下方法: 调用product(6)时的输出是什么? D)48 E)70 根据答案,正确的输出是48。我真的不明白为什么这是真的。6不符合基本情况,所以转到else语句。那么,乘积(6-2)=乘积(4),乘积(2)得到乘积(0),乘积(2)得到乘积(0),得到6*4,4*2,2*0,0*0。但那是32,不是48?是不

  • 在这个问题中,的定义是 其左子树中的节点数和其右子树中的节点数几乎相等,这意味着它们的差异不大于1 如果给定一个作为总节点数,这样的树有多少? 另外,如果我们将替换为呢?给定一个,有多少高度平衡的树?

  • 我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?

  • 日安, 我有一个问题,在我的代码中,一个声明在函数之外有一个错误。 谢谢

  • 给定两棵二叉树,想象一下,当您将其中一棵树覆盖另一棵树时,两棵树的一些节点重叠,而其他节点则不重叠。 您需要将它们合并到一个新的二叉树中。合并规则是,如果两个节点重叠,则将节点值加起来作为合并节点的新值。否则,非空节点将用作新树的节点。 输入: 输出:合并树: 问这个问题可能很幼稚,但这个算法是如何工作的?一旦我们返回这个t2或t1,它就会返回另一个TreeNode,所以从技术上讲,方法应该停止执