一文吃透二叉树:前中后序遍历+节点数+树高+叶子节点(含完整源码)

1、前言

二叉树是数据结构核心树形结构,递归实现简洁易懂,是面试、期末考试高频考点。

本文完整手写二叉树创建、递归遍历、统计总结点、叶子节点、树深度高度全套代码。

2、二叉树的完整实现

我们要想实现二叉树,要先定义一下二叉树的结构,二叉树是由一个一个的节点组成的,所以我们定义一下二叉树的每一个节点

2.1定义二叉树的结构,创建节点

2.2连接节点,组成一个二叉树

我们将这些节点彼此链接起来,就快速的构成了一个二叉树,然后返回根节点。

2.3二叉树的前序,中序,后序的遍历

我们解决这种问题,直接记住一个原则:根+子树,一直分,直到子树为NULL,就停止。

一、

前序遍历:根 → 左 → 右(先访问根节点)

中序遍历:左 → 根 → 右(根节点在中间)

后序遍历:左 → 右 → 根(最后访问根节点)

前、中、后,指的是根节点被访问的顺序,左右子树永远先左后右。

二、举个直观例子

现有二叉树结构:

  1. 前序遍历(根左右)

  2. 访问根:A

  3. 遍历左子树B(根B→左D→右E):B D E

  4. 遍历右子树C(根C→右F):C F

✅ 最终序列:A B D E C F

前序的代码实现:

递归展开图

  1. 中序遍历(左根右)

  2. 遍历左子树B(左D→根B→右E):D B E

  3. 访问根:A

  4. 遍历右子树C(左空→根C→右F):C F

✅ 最终序列:D B E A C F

中序的代码实现:

具体的递归展开图和上面的前序的展开图差不多一样,这里就不再写了。

  1. 后序遍历(左右根)

  2. 遍历左子树B(左D→右E→根B):D E B

  3. 遍历右子树C(左空→右F→根C):F C

  4. 访问根:A

✅ 最终序列:D E B F C A

后序代码实现:

2.4二叉树的节点个数

一颗二叉树的节点个数=根节点+左子树的节点总数+右子树的节点总数+1

中止的递归条件

如果当前节点为NULL,说明这颗子树没有节点,返回0,我们简陋写的代码如下

我们在这里用了一个三目操作符,我们先仍进去一个节点是否为NULL,如果为空就返回0,否则继续执行递归,最终返回左右子树节点总数之和。

2.5二叉树的高度

我们想一下,二叉树的高度是不是也可以用递归来解决呢?当只有根节点时,他就返回1,如果不等于1,就继续递归。

思想:一棵树的高度=1(当前根节点)+左子树高度和右子树高度最大的那个值

递归中止条件:如果当前节点为NULL,则这棵树就不存在,返回0;

2.6二叉树的叶子节点的个数

叶子节点=左右孩子都为NULL的节点(没有子节点)

递归核心思路

1.终止条件1:如果当前节点为NULL,没有节点,返回0;

2.终止条件2:如果当前节点的左右孩子都是NULL,返回1;

递归逻辑:否则,整棵树的叶子总数=左子树叶子数+右子树叶子数

3,结果展示

到这里,我们就简单的讲解了二叉树的遍历问题,下一次我们将展开的二叉树的oj题目进行详细的讲解,各位大佬,感觉我写的还可以的,麻烦留下你的小赞赞吧,我们下次再见!

相关推荐
信奥卷王3 分钟前
[GESP202509 六级] 货物运输(含视频)
算法
余额瞒着我当琳27 分钟前
C++算法学习篇5--二分查找法
c++·学习·算法
起个名字费劲死了37 分钟前
基于灰度/形状的2D模板匹配
算法
杜 硕43 分钟前
归并排序详解
数据结构·算法·排序算法
科技观察哨1 小时前
国产纳米定位平台与精密位移台量产能力图谱(2026):Z轴压电、XYθZ、六自由度并联与光刻/检测/装配选型指南
网络·人工智能·算法
鶴哥只手遮天2 小时前
《OpenFOAM 源码深度剖析》系列-第 3 章 字典系统、IO 体系与对象注册表
算法·开源
鶴哥只手遮天2 小时前
《OpenFOAM 源码深度剖析》系列-第 2 章 wmake:OpenFOAM 自研构建系统与编译配置体系
算法·开源
用户81849100742162 小时前
我把工位上的“AI牛马”养成了:一个技术人的 AiPy 实战手记
算法
Tisfy2 小时前
LeetCode 3727.最大交替平方和:排序 (双指针可选)
算法·leetcode·题解·贪心·数组·排序
鶴哥只手遮天2 小时前
《OpenFOAM 源码深度剖析》系列-第 9 章 有限体积离散框架:`fvMatrix`、`fvSchemes` 与 `fvSolution`
算法·开源