mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
401 字
1 分钟
二叉树的高度
2026-04-14

二叉树的高度#

一、引言#

开始之前我们来回顾一下树的高度:被定义为从根节点到最长叶子的距离。(因此一棵树的高度可以说是根节点的高度)。

高度:可以被定义为该节点到一个叶子节点的最长路径上的边数。

很显然,高度和叶子节点有关。

他常常和深度放在一起,导致二者极其容易被混淆。

深度指的是:从根节点到当前节点走的边数。

树的高度等于树中节点的最大深度。

a

二、cpp实现#

本文将带着大家实现查看一棵树的高度。

b

对于根节点来说,左子树的高度为2,右子树的高度为1。而整棵树的高度为3。

所以一棵树的高度就是max(左子树高度,右子树高度)+1。

利用这个公式,我们来模拟一下。

int findheight(BstNode *root){
if(root==NULL){//处理空树的情况,同样也是递归停止条件。
return 0;
}
leftheight=findheight(root->left);
leftheight=findheight(root->left);
return max(leftheight,righthight)+1;
}

这合理吗?不合理!

b

还是这张图,假设传入函数的是节点7.那么他会走两次递归,左树和右子树都为NULL。都返回0。

然后leftheight,righthight都是0,最后+1得到高度为1。但是这对吗?7明明是高度为0!

所以返回0并不正确!返回-1才是合理的。

正确代码如下

#include<iostream>
using namespace std;
struct BstNode{
int data;
BstNode *left;
BstNode *right;
};
int findheight(BstNode *root){
if(root==NULL){//处理空树的情况,亦是递归终止条件
return -1;
}
return max(findheight(root->left),findheight(root->right))+1;
}
int main(){
BstNode *root=NULL;
int height = findheight(root);
cout<<height;
}

找出树的高度,相当于把树所有节点都走了一遍!

菲比啾比!

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

二叉树的高度
https://fatdog.20060113.xyz/posts/bianry-tree-height/
作者
神秘大胖狗
发布于
2026-04-14
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00