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
语句)