数据结构——二叉树的性质和存储结构

news/2024/9/28 19:15:02 标签: 数据结构

二叉树的抽象类型定义

基本操作:

CreateBiTree(&T,definition)

初始条件:definition给出二叉树T的定义。

操作结果:按definition构造二叉树T。

PreOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:先序遍历T,对每个结点访问一次。

InOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:中序遍历T,对每个结点访问一次。

PostOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:后序遍历T,对每个结点访问一次。 

二叉树的性质和存储结构

在二叉树的第i层最少有1个结点。

 深度为k的二叉树最少有k个结点。

 

 两种特殊形式的二叉树

  • 满二叉树
  • 完全二叉树
满二叉树

为什么要研究这两种特殊形式?

因为它们在顺序存储方式下可以复原!

满二叉树

 

 特点:

1、每一层上的结点数都是最大结点数(即每层都满);

2、叶子结点全部在最底层

对满二叉树结点进行编号

  • 编号规则:从根结点开始,自上而下,自左向右。
  • 每一结点位置都有元素。

满二叉树在同样深度的二叉树中结点个数最多

满二叉树在同样深度的二叉树中叶子结点个数最多

完全二叉树

 注:在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一棵完全二叉树。
一定是连续的去掉!!!

 特点:1.叶子只可能分布在层次最大的两层上;

         2.对任一结点,如果其右子树的最大层次为i,则其左子树的最大层次必为i或i+1。

 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

 完全二叉树的性质

 性质4表明了完全二叉树结点数n与完全二叉树深度k之间的关系

性质5:如果对一棵有n个结点的完全二叉树(深度为)的结点按层序编号(从第1层到第层,每层从左到右),则对任一结点i(1<=i<=n)有:

性质5表明了完全二叉树中双亲结点编号与孩子结点编号之间的关系。 

 二叉树的存储结构

二叉树的顺序存储

实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素。

二叉树的顺序存储的缺点:

最坏情况:深度为k的且只有k个结点的单支树需要长度为 的一维数组。

这样存储的话会浪费空间,存储密度低,适于存储满二叉树完全二叉树

二叉树的链式存储

 

二叉树结点的特点

存储方式

data:存储结点数据;

lchild:指向左孩子的指针;

rchild:指向右孩子的指针。

二叉链表存储结构
typedef struct BiNode {
	TElemType data;
	struct BiNode* lchild, * rchild;//左右孩子指针
}BiNode,*BiTree;

BiNode是普通的结点类型
BiTree是指向有这样三个成员的指针

 

通过头指针找到这棵树,头指针表示树的时候通常会用字母T表示,头指针没有数据域。

如上图,我们的根节点有左孩子没有右孩子,所以在指针域中,指向左孩子的指针为存储结点B的地址,指向右孩子的指针为空。

在n个指针的二叉链表中,有多少个空指针域呢?

分析:必有2n个链域。除根结点外,每个结点有且只有一个双亲,所以只会有n-1个结点的链域存放指针,指向非空子女结点。

所以空指针数目=2n - (n-1)= n + 1

三叉链表存储结构

typedef struct TriTNode {
	TElemType data;
	struct BiNode* lchild,*parent, * rchild;//左右孩子指针
}TriTNode,*TriTree;

TriTNode是普通的结点类型
TriTree是指向有这样四个成员的指针

 三叉链表比二叉链表多一个指针域,指向结点的双亲。

 


http://www.niftyadmin.cn/n/5681689.html

相关文章

《深度学习》自然语言处理 统计、神经语言模型 结构、推导解析

目录 一、语言转换方法 1、如何将语言转换为模型可以直接识别的内容 1&#xff09;数据预处理 2&#xff09;特征提取 3&#xff09;模型输入 4&#xff09;模型推理 二、语言模型 1、统计语言模型 1&#xff09; 案例&#xff1a; • 运行结果&#xff1a; • 稀疏…

Linux安装tomcat及配置环境变量超详细教程

微服务Linux解析部署使用全流程 linux系统的常用命令 Linux安装vim超详细教程 Linux安装JDK及配置环境变量超详细教程 1、上传压缩包 统一创建目录&#xff1a;/usr/local/tomcat&#xff0c;将压缩包上传到这个目录下。拖动文件到这个目录下即可。 2、执行解压命令 先进…

3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展

3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展 1 官网下载最新3D Slicer image computing platform | 3D Slicer 版本5.7 2 安装torch依赖包&#xff1a; 2.1 进入安装目录C:\Users\wangzhenlin\AppData\Local\slicer.org\Slicer 5.7.0-2024-09-21\bin&#xff0…

3d可视化图片:通过原图和深度图实现

1、depthy 在线体验demo: https://depthy.stamina.pl/#/ 也可以docker安装上面服务: docker run --rm -t -i -p 9000:9000 ndahlquist/depthy http://localhost:90001)首先传原图 2)再传对应深度图 3)效果

【nrm】npm 注册表管理器

nrm是什么 nrm&#xff08;NPM Registry Manager&#xff09;是一个用于管理 Node.js 包管理器&#xff08;如 npm 和 Yarn&#xff09;的注册表工具。它可以帮助用户快速切换不同的 npm 源&#xff0c;以便于提高包安装的速度和效率&#xff0c;特别是在中国大陆地区&#xf…

Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

宠物空气净化器希喂和352哪个好用?两大爆火机型哪款吸毛、除臭效果比较好?

猫毛、狗毛、鹦鹉毛&#xff0c;总之只要家里养着有带毛的宠物&#xff0c;毛就会出现在各种地方&#xff0c;床上、沙发上、衣服上、水杯里...根本躲不开。而且&#xff0c;除了肉眼可见的&#xff0c;呼吸时、说话时&#xff0c;不经意间还会吃到毛毛。这些毛毛飘在空气里时&…