数据结构(5)二叉树

发布时间:2026/10/7 7:07:10

数据结构(5)二叉树 今天系统学习了二叉树相关内容线性结构顺序表、链表的数据排列只有前后单一关系而二叉树属于树形结构元素之间存在一对多的关联这也是它和链表最大的区别。基础定义一棵树包含若干节点。没有前驱的顶层节点称为根节点没有后继的节点是叶子节点同时拥有前驱与后继的节点为分支节点。根节点处于第1层每向下访问一个节点层数递增。一棵二叉树规定任意节点最多只能拥有两个后继节点分为左孩子、右孩子左右顺序不能随意调换。在此基础上延伸出两种特殊二叉树满二叉树要求每一层全部填满节点所有叶子节点位于同一层完全二叉树可以理解为满二叉树按顺序从右至左、自底层向上删减节点得到节点编号连续。二叉树的性质二叉树第k层最多存在 2^{k-1} 个节点一棵满二叉树前k层节点总数为 2^k-1二叉树最核心的操作是遍历分为两大思路深度优先遍历DFS、广度优先遍历BFS。深度优先依靠递归实现根据根节点的访问顺序分为三类前序遍历根节点 → 左子树 → 右子树根左右中序遍历左子树 → 根节点 → 右子树左根右后序遍历左子树 → 右子树 → 根节点左右根广度优先遍历也叫层序遍历不再使用递归。按照从上至下、同一层从左向右的顺序依次访问节点一般依靠队列完成实现。今天动手完成了代码功能实现绝大多数函数依托递归编写构建二叉树分别实现了完全二叉树、普通非完全二叉树的创建逻辑四种遍历方式前序、中序、后序递归遍历以及借助队列实现的层序遍历统计二叉树高度递归分别求出左子树高度、右子树高度取较大值再加一二叉树销毁遵循后序遍历的思路优先释放左右子节点空间最后释放根节点避免内存泄漏。递归是学习二叉树绕不开的思路。处理任意一棵子树的逻辑和处理整棵树的逻辑完全一致。我们只需要专注单个节点需要完成的操作剩下的工作交给递归递推到下层节点。这也是二叉树大量接口选择递归实现的原因。同时也要区分两种创建方式的差异。完全二叉树可以借助数组存储数据依靠下标关系快速建立父子节点联系对于形态不规则的普通二叉树需要手动逐个建立节点之间的指向关系。在代码书写过程中需要留意边界条件。比如访问空节点时要及时终止递归否则代码会持续向下调用引发异常销毁树的时候释放内存的顺序不能颠倒一旦提前释放父节点将无法找到子节点地址。线性结构适合处理有序连续的数据而树形结构可以高效实现查找、排序相关场景。熟练掌握遍历与递归思路才能继续往后深入学习。
延伸阅读

更多相关文章

2026/10/7 7:06:52

VMware收购后企业虚拟化格局洗牌:从替代方案到云原生转型

两年前,当Broadcom宣布完成对VMware的收购时,整个企业IT圈的反应是复杂的。一方面,大家知道这桩交易背后是巨大的资本运作;另一方面,几乎所有依赖VMware虚拟化技术构建起数据中心、私有云和开发测试环境的企业和开发者…

2026/10/3 8:21:28

基于IMU与肌电传感器的嵌入式康复数据采集系统设计与实现

1. 项目概述:当康复训练遇上嵌入式数据采集前交叉韧带(ACL)重建术后的康复,对任何运动员或运动爱好者来说,都是一段漫长且充满不确定性的旅程。康复效果的好坏,直接关系到能否重返赛场,甚至影响…

2026/9/24 13:10:00

万圣节骷髅制作全攻略:从设计到实现的创意手工教程

1. 从“恐怖符号”到“创意载体”:万圣节骷髅的演变与内核 提起万圣节,除了南瓜灯和糖果,最深入人心的视觉符号莫过于骷髅。它早已超越了单纯的恐怖意象,演变成一种充满趣味、创意和节日氛围的文化载体。无论是作为家居装饰的核心…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/6 4:01:51

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

ESP32免重刷固件:浏览器直接修改NVS键值实现WiFi配置更新

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

SAP HANA查询结果导出CSV:避开乱码、性能与权限的实用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

数字后端Placement阶段Density与Congestion控制实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑