当前位置: 首页 > news >正文

从链表到二叉树:树形结构的入门与核心性质解析

从链表到二叉树:树形结构的入门与核心性质解析

  • Bilibili 同步视频
  • 一、现实树 vs 计算机树:反向生长的“倒栽葱”
  • 二、链表与树的关联:链表是特殊的树形结构
    • C++代码对比(核心差异)
  • 三、二叉树:树形结构的核心(重点)
    • 1. 二叉树节点定义(C++标准版)
    • 2. 二叉树结构示例
    • 3. 示例二叉树初始化(C++)
  • 四、节点的“度”:衡量分叉能力的关键
  • 五、二叉树经典性质(必记)
    • 简化推导(初中数学可懂)
  • 六、写在最后

Bilibili 同步视频

从链表到二叉树:树形结构的入门与核心性质解析

🌳 数据结构是程序设计的基石,树形结构更是贯穿各类技术场景(数据库索引、文件系统等)的核心。二叉树作为树形结构的经典代表,是每个程序员的必备知识点。本文从现实场景出发,简化拆解从链表到二叉树的演变、核心定义及经典性质,帮你快速吃透底层逻辑!

一、现实树 vs 计算机树:反向生长的“倒栽葱”

现实中的树:根在地下,向上分叉、枝繁叶茂,遵循“根→树干→枝叶”的生长逻辑。

计算机中的树:恰好相反,是“倒栽葱”结构——根节点在最上方,叶子节点在最下方,通过节点与有向边的指向关系,实现层级关联。

【文本绘制:结构对比】

现实树: 枝叶 → 树干 → 树根(地下)

计算机树:根节点(1)→ 子节点(2、3、4)→ 叶子节点(5、6)

核心本质:计算机树 = 节点(存储数据) + 有向边(表示层级关系)。

二、链表与树的关联:链表是特殊的树形结构

💡 核心结论:链表是一种特殊的树形结构,二者的核心区别的在于指针域的指向能力。

  • 链表:每个节点只有1个指针域,仅能唯一指向一个后继节点,呈线性结构(一对一关联);

  • 树形结构:将单一指针域改为数组指针域,可指向多个子节点,实现“分叉”(一对多关联)。

【文本绘制:树转链表示意】

原始树:根(1)→ [2、3、4] → 2→5,4→[5、6] → 砍去多余分支 → 链表:1→2→5

C++代码对比(核心差异)

// 1. 链表节点(单一指针域)structListNode{intval;ListNode*next;// 仅指向1个后继节点ListNode(intx):val(x),next(nullptr){}};// 2. 树形节点(数组指针域,以三叉树为例)#include<vector>usingnamespacestd;structTreeNode{intval;vector<TreeNode*>children;// 可指向多个子节点TreeNode(intx):val(x){}};

注:每个节点最多有3个指针域的树,称为三叉树;多余指针域指向nullptr(空节点)。

三、二叉树:树形结构的核心(重点)

📌 定义:每个节点最多有2个指针域,分别称为左孩子(left)右孩子(right),分叉方向严格限定为左右,是应用最广泛的树形结构。

1. 二叉树节点定义(C++标准版)

structBinaryTreeNode{intval;// 数据域BinaryTreeNode*left;// 左孩子指针BinaryTreeNode*right;// 右孩子指针// 构造函数(默认左右孩子为空)BinaryTreeNode(intx):val(x),left(nullptr),right(nullptr){}};

2. 二叉树结构示例

【文本绘制:经典二叉树】

根(1)
/
2 3
/ \
4 5 6

结构说明:根节点1的左孩子为2、右孩子为3;节点2有左右孩子4、5;节点3只有右孩子6;4、5、6为叶子节点(无孩子)。

3. 示例二叉树初始化(C++)

intmain(){// 创建所有节点BinaryTreeNode*root=newBinaryTreeNode(1);BinaryTreeNode*node2=newBinaryTreeNode(2);BinaryTreeNode*node3=newBinaryTreeNode(3);BinaryTreeNode*node4=newBinaryTreeNode(4);BinaryTreeNode*node5=newBinaryTreeNode(5);BinaryTreeNode*node6=newBinaryTreeNode(6);// 建立左右孩子关联root->left=node2;root->right=node3;node2->left=node4;node2->right=node5;node3->right=node6;return0;}

四、节点的“度”:衡量分叉能力的关键

📌 定义:节点的度 = 该节点拥有的孩子节点数量(不包含空指针),分为3类:

  1. 度为0:无孩子(叶子节点,如4、5、6);

  2. 度为1:仅有1个孩子(如节点3,只有右孩子6);

  3. 度为2:有2个孩子(如节点1、2)。

小科普:“度”源自图论,树形结构中的“度”本质是图论中的“出度”(节点指向其他节点的边数),无需复杂记忆,记住“度=孩子数”即可。

五、二叉树经典性质(必记)

✅ 核心性质:任意二叉树中,度为0的叶子节点数(n0)= 度为2的节点数(n2)+ 1,无例外!

简化推导(初中数学可懂)

  1. 前提1:总节点数N = 度为0节点数(n0)+ 度为1节点数(n1)+ 度为2节点数(n2);

  2. 前提2:N个节点的树,必有N-1条边(树的基本特征);

  3. 推导:边数 = 所有节点度之和(度为0贡献0条,度1贡献1条,度2贡献2条),即边数 = n1 + 2n2;

  4. 联立等式:n0 + n1 + n2 = (n1 + 2n2)+ 1 → 化简得 n0 = n2 + 1。

验证:示例二叉树中,n0=3(4、5、6),n2=2(1、2),3=2+1,完全符合。

六、写在最后

从链表(线性单一指向)到二叉树(层级左右分叉),是数据结构从“线性”到“层级”的关键跨越。二叉树的核心价值的在于解决链表“查找效率低”的问题,而n0 = n2 + 1这一性质,是后续学习二叉搜索树、平衡二叉树的基础。

🌱 数据结构的学习,核心是理解“按需设计”的逻辑——每一种结构的升级,都是为了适配更复杂的业务场景。下一篇,我们将拆解二叉树的三种遍历方式,用C++实现递归与非递归代码,敬请期待!

http://www.jsqmd.com/news/637589/

相关文章:

  • linux库的制作
  • 从Deduction到Induction:探索中西思维差异在AI发展中的映射
  • 递归、搜索与回溯算法(专题二:深搜)
  • ConvNeXt 系列改进:ConvNeXt 用于视频行为识别:3D ConvNeXt 改进与 Kinetics 实验
  • 告别Pyppeteer安装烦恼:手动下载Chromium并指定路径的保姆级教程
  • 为什么91%的AIAgent代码生成项目在POC后流产?奇点大会首席架构师亲授“生成-验证-归档”黄金三角工作流(含自动化测试覆盖率阈值表)
  • 不只是下载器:把aria2打造成你的Windows 11自动化下载中心(支持批量、代理与脚本集成)
  • 2026年3月必看!市场口碑好的铁皮螺旋风管公司评测推荐,行业内铁皮螺旋风管实力厂家哪家好安庆茗力通风工程市场认可度高 - 品牌推荐师
  • Termwind与Laravel完美集成:构建专业级控制台命令
  • 英飞凌iLLD封装库实战指南:从基础配置到高级应用
  • AIAgent个性化辅导系统在SITS2026真实课堂中的效果跃升47%(附学情归因模型与教师干预阈值表)
  • 注意力机制模块:顶会 TGRS 2026:LSK 注意力(大核选择)复现与 YOLOv8 集成实验
  • vLLM本地缓存实战,重复提交直接复用不浪费算力
  • 磐维数据库PanWeiDB单机多实例部署详解:用户隔离、端口规划与目录结构最佳实践
  • 2026年知名的1688托管运营/1688托管运营装修靠谱公司推荐 - 品牌宣传支持者
  • 二叉搜索树、二叉排序树(查找、插入和删除)——Java版本
  • STM32G474的ADC实战避坑:从CubeMX配置到代码调试,手把手教你精准采集3.3V电压
  • 一丹一世界FLUX.1图像生成服务:支持移动端触控的7861 WebUI部署全流程
  • Java-二叉排序树
  • 如何部署TinyRecursiveModels:生产环境中的7个关键步骤与最佳实践
  • 别再死记硬背Bagging了!用狼人杀和Python代码,5分钟搞懂随机森林的‘投票’精髓
  • Datadog 发布 OpenTelemetry Go 自动插桩工具
  • 如何优化AutoTrain Advanced多模态模型部署:模型拆分与推理加速完整指南
  • 终极指南:Open Images边界框标注技术详解——600+对象类别的精确定位方案
  • 2026届必备的五大AI学术网站解析与推荐
  • 告别环境冲突!用Anaconda在PyCharm里为PyTorch项目创建独立的CUDA环境(保姆级图文)
  • Rust模块系统深度解析
  • 别再只用AES-ECB了!手把手教你用Python复现CTF经典攻击,从密文块反推HTTP请求
  • 如何解决宝塔面板7.x升级到8.x后部分插件不兼容报错_在插件商店重装受影响插件以适配新Python环境
  • Google Earth Engine(GEE)——沿海国家高程数据库(CoNED)