跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

数据结构基础:树和二叉树

综述由AI生成树与二叉树的基础概念,包括树的定义、节点关系及度量方式。详细阐述了树的顺序与链式存储结构,并深入讲解了二叉树的定义、特殊形态(满二叉树、完全二叉树)及核心性质。此外,还涵盖了二叉树的四种遍历方法:前序、中序、后序及层序遍历,为理解递归与数据结构提供了理论基础。

内存管理发布于 2026/3/25更新于 2026/5/2724 浏览

一、树的基本概念

1. 定义

树是 n(n >= 0)个结点的有限集合。

  • n = 0 时:称为空树。
  • n > 0 时,满足:
    • 有且仅有一个根结点(root)
    • 其余结点可分为 m(m>0)个互不相交的有限集合,每个集合本身也是一棵树,称为根的子树

2. 结点的分类

  1. 结点:树中的一个独立单元,包含一个数据元素,及若干指向其子树的分支。
  2. 度(结点的):子树的个数。
  3. 树的度:结点中最大的度。
  4. 叶子节点(终端节点):度为 0 的节点。
  5. 分支节点(内部节点或非终端节点):度不为 0。

树结构示例

3. 节点之间的关系

  1. 双亲和孩子:结点的子树称为该结点的孩子,该结点也称为孩子的双亲。
  2. 兄弟:同一个双亲的孩子之间互称兄弟;双亲在同一层的孩子称为堂兄弟。
  3. 祖先和子孙:结点的祖先是从根到该结点所经分支上的所有结点,以某结点为根的子树中的任一结点称为该结点的子孙。

节点关系图 节点关系图 节点关系图 节点关系图

4. 度量树

  • 树的深度:树中的结点的最大层次。
  • 树的高度:两者之间数值相同。

树的高度

5. 有序树和无序树

如果将树中的结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序的,否则称为无序树。

有序树与无序树

6. 森林

森林是 m ( m >= 0 ) 棵互不相交的树的集合。

7. 线性结构和树结构的区别

线性结构树结构
第一个数据元素:无前驱根结点:无双亲,唯一
最后一个数据元素:无后继叶结点:无孩子,可以多个
中间元素:一个前驱,一个后继中间结点:一个双亲多个孩子

二、树的存储结构

1. 顺序存储

适用于完全二叉树等结构规则的树,常用数组实现。

顺序存储 顺序存储

2. 链式存储

通用方式:每个节点包含数据域和指向子节点的指针域。

链式存储


三、二叉树

1. 定义

是 n(n≥0)个结点的有限集合,或为空树(n=0);或由一个根结点和两棵互不相交的子树组成,分别称为左子树和右子树,且二者有严格顺序。

2. 特点

  1. 每个结点最多有两个子树,所有二叉树中不存在度大于 2 的结点;
  2. 左、右子树有顺序,不可互换;
  3. 即使某结点仅有一个子树,也必须明确是左子树还是右子树。

3. 二叉树的五种基本形态

  1. 空二叉树
  2. 只有一个根结点
  3. 根结点只有左子树
  4. 根结点只有右子树
  5. 根结点既有左子树又有右子树

4. 特殊二叉树

  1. 斜树:所有的结点都只有左子树的二叉树叫左斜二叉树,所有结点都只有右子树的二叉树叫右斜树,这两种情况统称斜树。
  2. 满二叉树:在一棵二叉树中,如果所有的分支结点都存在左子树和右子树,并且所有的叶子都在同一层,这样的二叉树称为满二叉树。(深度为 k 且结点数为 (2^k) - 1 的二叉树,在同等深度的二叉树中,满二叉树的结点个数最多,叶子数最多)
  3. 完全二叉树:对 n 个结点按层序从 1 到 n 编号,若每个结点的位置与相同深度的满二叉树中编号相同的结点位置一致,则为完全二叉树。
    • 完全二叉树的特点:除最后一层外,其它层全满,最后一层的结点靠左排列
    • 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树
    • 按层序编号就是设想每一个结点都有左右子树,都编号,如下图,就是 5 没有左子树,但是还是会给他的左子树编 10,尽管他为空,右子树编 11
    • 叶子结点只能出现在最下两层
    • 最下层的叶子一定集中在左边连续的位置
    • 倒数第二层若有叶子结点,一定在右边连续的位置
    • 如果结点度为 1,则该结点只有左孩子
    • 同样结点数的二叉树,完全二叉树的深度最小

完全二叉树

5. 二叉树的性质

  1. 在二叉树的第 i 层最多有 2^(i-1) 个结点(i>=1)
  2. 深度为 k 的二叉树最多有 (2^k)-1 个结点
  3. 对于任何一棵二叉树,如果其终端结点数为 m,度为 2 的结点数为 n,则 m = n + 1
  4. 具有 n 个结点的完全二叉树的深度为 ⌊log₂n⌋+1(对数是以 2 为底,⌊x⌋表示不大于 x 的最大整数)
  5. 如果对一棵有 n 个结点的完全二叉树(其深度为 ⌊log₂n⌋+1)的结点按层序编号(从第 1 层到第 ⌊log₂n⌋+1 层,每层从左到右),对任一结点 i(1≤i≤n)有:
    • 如果 i = 1,则结点 i 是二叉树的根,无双亲;
    • 如果 i > 1,则其双亲是结点 ⌊i / 2⌋
    • 如果 2i > n,则结点 i 无左孩子(结点 i 为叶子结点);否则其左孩子是结点 2i
    • 如果 2i+1>n,则结点 i 无右孩子;否则其右孩子是结点 2i+1。

四、二叉树的遍历

从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。

1. 前序遍历

规则:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。如下图,遍历的顺序为 ABDGHCEIF。

前序遍历

2. 中序遍历

规则:若二叉树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后访问根结点,最后中序遍历右子树。如下图,遍历的顺序为 GDHBAEICF。

中序遍历

3. 后序遍历

规则:若二叉树为空,则空操作返回,否则先后序遍历左子树,再后序遍历右子树,最后访问根结点。

4. 层序遍历

规则:从上到下、从左到右依次访问每一层的结点。

层序遍历 层序遍历

目录

  1. 一、树的基本概念
  2. 1. 定义
  3. 2. 结点的分类
  4. 3. 节点之间的关系
  5. 4. 度量树
  6. 5. 有序树和无序树
  7. 6. 森林
  8. 7. 线性结构和树结构的区别
  9. 二、树的存储结构
  10. 1. 顺序存储
  11. 2. 链式存储
  12. 三、二叉树
  13. 1. 定义
  14. 2. 特点
  15. 3. 二叉树的五种基本形态
  16. 4. 特殊二叉树
  17. 5. 二叉树的性质
  18. 四、二叉树的遍历
  19. 1. 前序遍历
  20. 2. 中序遍历
  21. 3. 后序遍历
  22. 4. 层序遍历
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • SeaweedFS 轻量分布式存储:中小规模 LoRA 训练部署方案
  • JavaScript 基础语法与 jQuery 快速入门
  • 算法模拟实战:替换所有问号与提莫攻击解析
  • 算法题精讲:双指针法解决移动零与复写零
  • 基于 Apache POI 实现高德 POI 分类数据导入 PostgreSQL
  • 人工智能大模型技术白皮书
  • 2026 年主流 AI 工具深度对比:豆包、DeepSeek、ChatGPT 等选型指南
  • FPGA 时序逻辑实战:计数器、跨时钟域与状态机解析
  • Draw.io 官方 MCP Server 配置与使用指南
  • ClawPanel 开源管理面板:支持 20+ 通道接入与多模型配置
  • Spring AI Alibaba A2A 分布式智能体通信实战指南
  • VS Code Java 扩展插件 JDK 版本报错解决方案
  • 基于 Rokid AR 眼镜的 Android 喝水提醒应用开发
  • 基于 MSO-VMD-CNN-BiLSTM 的故障诊断模型研究与 Matlab 实现
  • 数据结构:堆及堆的应用
  • FPGA 摄像头采集与 HDMI 显示实战:OV5640 驱动及 Verilog 实现
  • Linux 环境变量:作用、分类及自定义配置技巧
  • GoLand 远程连接服务器开发配置指南
  • 基于 WebTop 与 Tailscale 实现云端 OpenClaw 真实桌面浏览器方案
  • Ubuntu 22.04 部署 OpenClaw 实战:多模型接入与网络搜索配置

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online