当前位置: 首页 > 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
上的节点,接着是第三层的节点,以此类推, 自上而下,自左至右逐层访问树的结点的过程 就是层序遍历。
http://www.xdnf.cn/news/87175.html

相关文章:

  • 自动化测试基础知识总结
  • Megatron - LM 重要文件解析 - /tools/preprocess_data.py
  • 广州市白云区粤荣职业培训学校副校长余智强获聘广州培训质量督导员
  • PostgreSQL 常用日志
  • 基于国内主流AI工具的视频生成完整流程及工具对比总结
  • 企业战略到数字化落地 —— 第二章 数字化
  • ubuntu的各种工具配置
  • 2021 国考
  • 仓颉造字,亦可造AI代理
  • 网络基础概念(下)
  • 什么是snmp协议?在优雅草星云智控AI物联网监控系统中如何添加设备进行监控【星云智控手册01】-优雅草卓伊凡
  • JavaScript 中的 this 及 this 指向的改变方法
  • 基于SpringBoot的中华诗词文化分享平台-项目分享
  • HarmonyOS:1.7
  • Cursor 设置规则
  • CentOS7 环境配置
  • metasploit(2)生成dll木马
  • 给vue-admin-template菜单栏 sidebar-item 添加消息提示
  • 嵌入式面试高频笔试题目解析
  • Vue3-全知识点
  • Java求多点位之间的共点
  • TockOS,一种新安全软件架构的RTOS介绍
  • C# 事件知识文档
  • Cyber SpaceGuidance网安学习指南见解
  • 零基础学Python——第八章:实战项目(1-3)
  • 46.[前端开发-JavaScript高级]Day11-生成器-async和await-事件循环-队列
  • YOLO算法的革命性升级:深度解析Repulsion损失函数在目标检测中的创新应用
  • 18.1基于Linux的INPUT子系统实验(知识)_csdn
  • A2A + MCP:构建实用人工智能系统的超强组合
  • 记录:扩展欧几里得算法