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

[数据结构]树和二叉树

概念

树是一种 非线性 的数据结构,它是由 n n>=0 )个有限结点组成一个具有层次关系的集合。
树形结构中,子树之间不能有交集,否则就不是树形结构
双亲结点或父结点 :若一个结点含有子结点,则这个结点称为其子结点的父结点;
非终端结点或分支结点 度不为0的结点
一棵二叉树是结点的一个有限集合,该集合:
1. 或者为空
2. 或者是由 一个根节 点加上两棵别称为 左子树 右子树的二叉树组成。二叉树是有序树。(递归式)
1. 满二叉树 : 一棵二叉树,如果 每层的结点数都达到最大值,则这棵二叉树就是满二叉树 。也就是说, 如果一棵 二叉树的层数为 K ,且结点总数是 2的k次方-1 ,则它就是满二叉树
2. 完全二叉树 : 对于深度为 K 的,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为K 的满二叉树中编号从 0 n-1 的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
最大深度: 即每次只有一个节点,次数二叉树的高度为n,为最高的高度
广度优先需要把下一步所有可能的位置全部遍历完,才会进行更深层次的遍历, 层序遍历就是一种广度优先遍历

深度优先是先遍历完一条完整的路径(从根到叶子的完整路径),才会向上层折返,再去遍历下一个路径,前序遍历就是一种深度优先遍历

最大深度: 即每次只有一个节点,次数二叉树的高度为n,为最高的高度

最小深度: 此树为完全二叉树, 如果是完全二叉树

根据二叉树性质,完全二叉树的高低为 h = log(n+1)向上取整

已知某二叉树的中序遍历序列为JGDHKBAELIMCF,后序遍历序列为JGKHDBLMIEFCA,则其前序遍历序列为(.ABDGJHKCEILMF )

由后序遍历确定子树的根,后序遍历从后向前看,最后一个元素为根,和前序遍历刚好相反,从后向前看后序遍历,应该是根,右,左,根据中序遍历确定子树的左右区间 

二叉树的性质 

1. 若规定 根结点的层数为 1 ,则一棵 非空二叉树的第 i 层上最多有 2的(i-1)次方 (i>0) 个结点
2. 若规定只有 根结点的二叉树的深度为 1 ,则 深度为 K 的二叉树的最大结点数是 2的K次方-1
(k>=0)
3. 对任何一棵二叉树 , 如果其 叶结点个数为 n0, 度为 2 的非叶结点个数为 n2, 则有 n0=n2+1
4. 具有 n 个结点的完全二叉树的 深度k为log2(n+1)上取整
5. 对于具有 n 个结点的完全二叉树 ,如果按照 从上至下从左至右的顺序对所有节点从 0 开始编号 ,则对于 序号为 i 的结点有
i>0 双亲序号: (i-1)/2 i=0 i 为根结点编号 ,无双亲结点
2i+1<n ,左孩子序号: 2i+1 ,否则无左孩子
2i+1<n ,左孩子序号: 2i+2 ,否则无右孩子

二叉树的存储

二叉树的存储结构 分为: 顺序存储(堆) 类似于链表的链式存储
叉树的链式存储是通过 一个一个的节点引用起来的 ,常见的表示方式有二叉和三叉表示方式
// 孩子表示法
class Node {
int val; // 数据域
Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树
Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树
}

二叉树的遍历

前中后序遍历

N 代表根节点, L 代表根节点的左子树,R 代表根节点的右子树,则根据遍历根节点的先后次序有以下遍历方式:
NLR :前序遍历 (Preorder )—— 访问根结点 ---> 根的左子树 ---> 根的右子树。
LNR :中序遍历 (Inorder )—— 根的左子树 ---> 根节点 ---> 根的右子树。
LRN :后序遍历 (Postorder —— 根的左子树 ---> 根的右子树 ---> 根节点。
前序+中序-- 确定根节点  后序+中序--确定根节点 
以先序遍历为例:(本质还是递归)
前序遍历结果: 1 2 3 4 5 6
中序遍历结果: 3 2 1 5 4 6
后序遍历结果: 3 2 5 6 4 1

层序遍历

层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第 2
上的节点,接着是第三层的节点,以此类推, 自上而下,自左至右逐层访问树的结点的过程 就是层序遍历。

相关文章:

  • 来啦,烫,查询达梦表占用空间
  • 鸣潮赞妮技能机制解析 鸣潮赞妮配队推荐
  • Docker 部署 MySQL 数据库
  • LeetCode 第 262 题全解析:从 SQL 到 Swift 的数据分析实战
  • 正向代理和反向代理
  • 【VS Code】打开远程服务器Docker项目或文件夹
  • FramePack V2版 - 支持首尾帧生成,支持LoRA,支持批量,支持50系显卡,一个强大的AI视频生成软件 本地一键整合包下载
  • 一款强大的实时协作Markdown工具 | CodiMD 9.6K ⭐
  • 小小矩阵设计
  • C++学习之类与对象
  • 一款丰富的工作流自动化平台 | N8N 83.6K ⭐
  • C++23 中 static_assert 和 if constexpr 的窄化布尔转换
  • 【锂电池剩余寿命预测】BiLSTM双向长短期记忆神经网络锂电池剩余寿命预测(Matlab源码)
  • Python基于语音识别的智能垃圾分类系统【附源码、文档说明】
  • 前端之勇闯DOM关
  • Nginx常用命令,及常见错误
  • PR网表出现assign该如何解决
  • 音视频小白系统入门课-3
  • 第十五讲、Isaaclab中在机器人上添加传感器
  • # 利用迁移学习优化食物分类模型:基于ResNet18的实践
  • 国防部:希望美方不要有“受迫害妄想症”,总拿别人当借口
  • 我国民营经济首季运行向新向好,对国民经济发展形成有力支撑
  • 梁启超“失肾记”的余波:中西医论战与最后的真相
  • 人民日报:外卖平台应保障好骑手就业权益,消除后顾之忧
  • 泽连斯基提议乌俄“立即、全面和无条件”停火
  • 山西国道塌方致55岁货车司机死亡,女儿:货车的车贷还要还