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

Tree 有人能给我解释一下这个二叉搜索树的高度函数吗?,tree,height,binary-search-tree,Tree,Height,Binary Search Tree,所以我一直在研究这个函数,它对我来说毫无意义 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 +

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

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;
}
int findHeight(二进制节点阳极)
{
如果(阳极==null){
返回-1;
}
int lefth=findHeight(阳极左);
int righth=findHeight(阳极右侧);
如果(左H>右H)
返回lefth+1;
其他的
返回righth+1;
}
假设我有一棵树,它由一个根组成,只剩下一个孩子。所以root->LeftChild

我们运行这个方法。 root不是null,所以我们继续使用int lefth=。。。 当我们到达int-Lefth时,我们再次运行相同的方法,但使用左子对象作为参数。 leftchild不为null,因此我们继续使用int lefth=。。。
但是孩子没有孩子,那么会发生什么呢?我一点也不理解它

最终
阳极。左
将在树中变为
null
,因此递归将停止

此时,递归堆栈(
findHeight root->findHeight root.left->findHeight root.left.left[null]
)将解析为一个数字

“最终”评估将是这样的

-1[null]+1[root.left]+1[root]=1

所以高度应该是1(只对根的左一个子项正确,仅此而已)


为简单起见,我在本例中省略了if/else。

一旦对叶节点的“子节点”(为null)调用该方法,则点击第一条if语句并返回-1。然后在堆栈上的每个递归调用中添加1,包括不存在的null子级的1。因此,该方法返回高度。

这是一个递归函数(它自己调用)。要理解它是如何工作的,你首先必须想象它的作用

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

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

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