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。

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

相关推荐
小羊先生car1 小时前
F429-HAL-RS485(回环/双机实验)(2026/8/16)
c语言·单片机·嵌入式硬件·软件构建
不会代码的小猴1 小时前
C++新增关键字
开发语言·c++·笔记
yaoxin5211232 小时前
497. Java 反射 - 使用反射读取注解
java·开发语言·python
2019一路前行2 小时前
Python 函数式编程
开发语言·python
liulilittle2 小时前
并发与内存安全术语:定义、分类与关联
c++·安全·并发·术语
_wyt0013 小时前
从图到树:9道洛谷基础题带你入门树形结构
c++·
冯汉栩3 小时前
Swift Control View,Label渐变颜色(源码)
开发语言·ios·swift
Titan20243 小时前
Linux网络基础知识
linux·服务器·网络·c++·学习
白狐_7984 小时前
408 数据结构|线索二叉树两题详解:先序线索化后的空链域 + 中序前驱/后继判断
c语言·数据结构·链表