二叉树的性质和存储结构
2023-04-18 15:27:21 时间
2. 两种特殊的二叉树
-
满二叉树
-
定义:一棵深度为 k 且有 2^k - 1 个结点的二叉树称为满二叉树。
-
特点:
- 每一层上的结点数都是最大结点数(即每层都满);
- 叶子结点全部在最底层;
-
对满二叉树结点位置进行编号
- 编号规则:从根结点开始,自上而下,自左而西;
- 每一结点位置都有元素;
-
-
完全二叉树
- 定义:深度为 k 的具有 n 个结点的二叉树,当且仅当其每一个结点都与深度同为 k 的满二叉树中编号为 1 ~ n 的结点一一对应时,称之为完全二叉树。
- 注:在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一棵完全二叉树,一定是连续的去掉!!!
- 特点:
- 叶子只可能分布在层次最大的两层上。
- 对任一结点,如果其右子树的最大层次为 i,则其左子树的最大层次为 i 或 i + 1。
3. 性质
-
性质3:任意二叉数的叶子结点数 = 其度为2的结点数 + 1;
-
性质4:具有 n 个结点的完全二叉树的深度为【 log2(n) 】+ 1。
注:【 x 】:称作x的底,表示不大于x的最大整数。
性质4表明了完全二叉树结点树n与完全二叉树深度k之间的关系。
-
性质5:如果对一棵有n个结点的完全二叉树(深度为【 log2(n) 】+ 1)的结点按层序编号(从第1层,到第【 log2(n) 】+ 1层,没层从左到右),则对任一结点 (1<= i<= n),有:
- 如果 i = 1,则结点 i 是二叉树的根,无双亲;如果 i > 1,则其双亲是结点【 i/2】。
- 如果 2i > n,则结点 i 为叶子结点,无左孩子;否则,其左孩子是结点 2i;
- 如果 2i + 1 > n,则结点 i 无右孩子;否则,其右孩子是结点 2i + 1。
4. 二叉树的顺序存储
-
实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素。
//二叉树顺序存储表示 #define MAXSIZE 100 Typedef TElemType SqBiTree[MAXSIZE] SqBiTree bt;
-
缺点:
最坏情况:深度为 k 的且只有 k 个结点的单支树需要长度为 2^k -1的一维数组。
-
特点:结点间关系蕴含在其存储位置中浪费空间,适用于满二叉树和完全二叉树。
5.二叉树的链式存储结构
//二叉树链式存储表示
typedef struct BiNode{
TElemType data;
struct BiNOde *lchild,*rchild;//左右孩子指针
}BiNode,*BiTree;
-
注:在 n 个结点的二叉链表中,有 n + 1 个空指针域。
-
三叉链表
typedef struct TriTNode{ TElemType data; struct BiNode *lchild,*parent,*rchild; }TriTNode,*TriTree;
相关文章
- 国产ChatGPT大战弱智吧效果实测!网页端小程序均已上线,人人可玩
- 微信小程序--》从零实现小程序项目案例
- 【Uniapp】小程序携带Token请求接口+无感知登录方案
- 【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式】
- 【uniapp小程序】上传图片
- 熬夜爆肝万字C#基础入门大总结【建议收藏】
- 瑞吉外卖项目功能全实现及完全代码解析
- 2022你不容错过的软件测试项目实战(web+app+h5+小程序)免费版
- 使用IDEA 进行 安卓开发
- mac系统M1pro芯片安装VMware Fusion虚拟机win11操作系统(原创详细版)
- Android Spider ApkScan-PKID 查壳工具下载使用以及相关技术介绍
- CM311-1A 卡刷 + 线刷、刷安卓与 Armbian 教程
- uniapp 小程序map地图上显示多个酷炫动态的标点
- 小程序发送模板消息给用户 —— 一次性模板实现“长期订阅”
- Mac系统HomeBrew安装过程
- 微信小程序项目实例——智能用电
- 解决小程序报错getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json
- uniapp Android 原生插件开发(Module 扩展为例·2022)
- 最全教程:微信小程序开发入门详解
- Kotlin Navigation开发