C++C语言之——二叉树

二叉树 是每个节点最多只有两个子节点的树形结构,这两个子节点分别称为左孩子 和右孩子,且左右顺序固定不可颠倒。

一、二叉树的简介

基本特征

  • 每个节点度数 ≤ 2(子节点数不超过2)。

  • 子树有左右之分,即使只有一个子节点也必须区分是左还是右。

  • 递归定义:二叉树要么为空,要么由一个根节点和两棵互不相交的二叉树(左子树和右子树)组成。

存储方式

  • 链式存储:每个节点包含数据域、左指针、右指针。

  • 顺序存储(数组):按层序排列,根节点下标1,节点i的左孩子为2i,右孩子为2i+1(适用于完全二叉树)。

遍历方式

  • 前序:根→左→右

  • 中序:左→根→右

  • 后序:左→右→根

  • 层序:从上到下,从左到右

二叉树广泛应用于表达式解析、哈夫曼编码、堆、搜索算法、数据库索引等场景。

二、二叉树的分类

常见分类

类型 说明
满二叉树​ 每层节点数都达到最大值,所有叶子节点在同一层
完全二叉树​ 除最后一层外全满,最后一层节点从左到右连续排列
平衡二叉树​ 任意节点左右子树高度差不超过1
二叉搜索树​ 左子树所有节点值 < 根节点值 < 右子树所有节点值

1、满二叉树

**满二叉树(Full Binary Tree / Perfect Binary Tree)**​ 是指所有非叶子节点都有两个子节点,且所有叶子节点都在同一层的二叉树。

定义要点

  1. 每个内部节点(非叶子节点)恰好有两个子节点(左孩子和右孩子)。

  2. 所有叶子节点位于同一层(深度相同)。

  3. 不存在度为 1 的节点。

数学性质

  • 若树的高度为 h(根节点高度为 1),则节点总数为 2h−1。

  • 第 k层(1≤k≤h)的节点数为 2k−1。

  • 叶子节点数为 2h−1。

示例

高度为 3 的满二叉树:

1

/ \

2 3

/ \ / \

4 5 6 7

所有非叶子节点(1、2、3)都有两个子节点,叶子节点(4、5、6、7)都在同一层。

与完全二叉树的区别

满二叉树 完全二叉树
所有层都必须填满 允许最后一层不满,但节点必须靠左连续
节点数固定为 2h−1 节点数范围 2h−1,2h−1
一定是完全二叉树 不一定是满二叉树
叶子节点全部在同一层 叶子节点可能分布在最后两层

2、完全二叉树

**完全二叉树(Complete Binary Tree)**​ 是指除了最后一层外,其余各层的节点数都达到最大值,并且最后一层的节点全部靠左连续排列的二叉树。

核心条件

  1. 除最后一层外,每一层都被填满(节点数达到最大)。

  2. 最后一层的节点从左到右依次排列,中间不能有空缺。

举例

1

2 3

4 5 6

重要性质

  • 可用数组高效存储:根节点下标1,节点i的左孩子为2i,右孩子为2i+1。

  • 节点数n与高度h满足:2h−1≤n<2h。

  • 叶子节点只能出现在最后两层,且最后一层的叶子节点靠左连续。

相关推荐
总要学点什么几秒前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
田甲15 分钟前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言
青少儿编程课堂25 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
严肃小白兔31 分钟前
MATLAB 绘图与科研论文插图制作:图形设计、统计表达与矢量导出
开发语言·matlab·科研绘图
Funlang2 小时前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
普通人62 小时前
PHP文件读写完全指南
开发语言·php·1024程序员节
坤坤子吖3 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢4 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
zh_xuan4 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
xiaoye-duck4 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型