news 2026/4/20 20:47:55

数据结构之初识二叉树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构之初识二叉树

二叉树,光有看名字就知道每个节点可以有两个分支:

就同这棵树的节点。

为什么要学习二叉树,因为它相较于C语言中的冒泡和二分查找,二叉树简直完爆它们,主打一个效率高。

接下来,介绍几个在二叉树中常见的名称:

1.节点的度:一个节点含有的子树的个数称为该节点的度

2.叶节点或终端节点:度为0的节点称为叶节点

3. 非终端节点或分支节点:度不为0的节点

4. 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点

5. 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点

6. 兄弟节点:具有相同父节点的节点互称为兄弟节点(亲兄弟)

7. 树的度:一棵树中,最大的节点的度称为树的度

8. 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推

9.树的高度或深度:树中节点的最大层次

10. 堂兄弟节点:双亲在同一层的节点互为堂兄弟

11. 节点的祖先:从根到该节点所经分支上的所有节点

12. 子孙:以某节点为根的子树中任一节点都称为该节点的子孙

13. 森林:由m(m>0)棵互不相交的树的集合称为森林

以上加粗就是需要进行深入理解的。

二叉树中又分为满二叉树完全二叉树,满二叉树就是每一层节点个数都是满的,比如第一层就是

2的零次方个节点第二层就是2的1次方节点就是2个节点即为满二叉树,完全二叉树通俗说就是除了最后一层以外,每个节点都要都要是满的,并且最后一层分支要靠左连续就是比如:

这些树都不是连续靠左的,正确应该是:

这是二叉树所具有的一些性质,第三点是需要记忆的。

在二叉树的学习中,我们会学习到堆,,引出大堆和小堆,大堆就是在顶部是整个树上值最大的元素,小堆就是值最小,我们要建一个堆其实很简单,就是malloc出一个数组然后利用二叉树的节点特性建堆,在二叉树中又父节点和子节点,它们两者之间的关系是father*2+1或者+2,为子节点,子节点-1整体除以2就是父节点的下标位置;经过正常开出数组后这个数组里面不是二叉树满足的顺序关系,于是要按照父节点与子节点的关系进行向下调整或者向上调整,代码如下:

先给出头文件

再给出向上向下调整

接下来就是开出数组空间的常规操作:

在二叉树的学习中,分治递归是常用的方法,有时题目还需结合栈和队列进行完成;在C语言的学习中我们学习过递归,递归核心思路是把大问题拆分为一个个小问题进行解决或者是说拆分为当前问题和子问题,返回条件是最小规模的子问题,在这方面学习时前期需按照递归一样画出递归展开图,一步一步走读代码。

在二叉树中存在前序遍历、中序遍历和后续遍历,还有一个与队列结合的层序遍历,我们先来学习前三个,三者代码几乎一模一样就是放置顺序不同

代码如下:

这是三者访问顺序不同之处

拿上面举例,二叉树应该这么看:

空白处用N表示。一棵树可以被拆分为左子树和右子树:

根 (左子树) 根(右子树)

左子树 右子树 左子树 右子树

正因为可以这样一直拆的特性,二叉树的题目离不开递归

接着就给出二叉树与队列的综合题:判断完全二叉树

这里的实现需先制造队列

代码:

层序遍历:

有些题目会给你三个遍历中的两个让你推第三个,这里需要观察它们的特性,前序第一个元素就是总根,后序最后以为就是总根,然后根据根的位置在中序中找出左子树和右子树,然后在根据两者去画图判断。

初学二叉树一定要画图解决问题。感谢观看!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 20:47:55

保姆级教程:在Vitis-AI Docker里把YOLOv3 Darknet模型转成ZCU104能跑的xmodel

从Darknet到ZCU104:YOLOv3模型高效转换实战指南 在边缘计算设备上部署目标检测模型时,Xilinx ZCU104开发板凭借其强大的DPU加速能力成为热门选择。但将常见的Darknet格式YOLOv3模型转换为ZCU104可执行的xmodel文件,需要跨越格式转换、模型量化…

作者头像 李华
网站建设 2026/4/20 20:41:14

游戏建造系统网格放置与碰撞检测

游戏建造系统中的网格放置与碰撞检测是现代沙盒与建造类游戏的核心机制之一。无论是《我的世界》的方块堆叠,还是《城市:天际线》的道路规划,都离不开这两项技术的支持。它们不仅为玩家提供了直观的建造体验,还确保了游戏世界的物…

作者头像 李华
网站建设 2026/4/20 20:34:22

Obsidian 与 llm-wiki-skill 是什么

Obsidian 与 llm-wiki-skill 是什么 目录 Obsidian 与 llm-wiki-skill 是什么 一、Obsidian 是什么? 核心特点(一句话讲清) 最简单的使用例子 二、`llm-wiki-skill` 脚本是什么? 它解决了什么问题? 核心原理:编译器模式 vs 传统 RAG 核心功能 三、完整实操案例:用它们学…

作者头像 李华
网站建设 2026/4/20 20:33:37

CoreXY架构革命:Voron 2.4如何实现300mm/s高速打印的极致精度

CoreXY架构革命:Voron 2.4如何实现300mm/s高速打印的极致精度 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 在开源3D打印领域,Voron 2.4代表着CoreXY运动控制技术的巅峰突破…

作者头像 李华