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

二叉树的抽象类型定义

基本操作:

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.mzph.cn/diannao/54908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Hive和Hadoop的白酒分析系统

本项目是一个基于大数据技术的白酒分析系统&#xff0c;旨在为用户提供全面的白酒市场信息和深入的价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark 为核…

LLM | Ollama WebUI 安装使用(pip 版)

Open WebUI (Formerly Ollama WebUI) 也可以通过 docker 来安装使用 1. 详细步骤 1.1 安装 Open WebUI # 官方建议使用 python3.11&#xff08;2024.09.27&#xff09;&#xff0c;conda 的使用参考其他文章 conda create -n open-webui python3.11 conda activate open-web…

Java五子棋

目录 一&#xff1a;案例要求&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;案例要求&#xff1a; 实现一个控制台下五子棋的程序。用一个二维数组模拟一个15*15路的五子棋棋盘&#xff0c;把每个元素赋值位“┼”可以画出棋…

不夸张、我就是这样考过PMP~

&#x1f335;方法虽然有点笨&#xff0c;但是按照这个方法认真学&#xff0c;60天过PMP真的来得及&#xff01;PMP是通过性考试&#xff0c;只要拿下及格分就行&#xff0c;选对学习方法两个月3A上岸稳稳的&#xff01;&#x1f53a;24年11月PMP考试时间&#xff1a;11月30日&…

通过OpenScada在ARMxy边缘计算网关上实现数字化转型

随着工业4.0概念的普及&#xff0c;数字化转型已成为制造业升级的关键路径之一。在此背景下&#xff0c;边缘计算技术因其能够有效处理大量数据、减少延迟并提高系统响应速度而受到广泛关注。ARMxy边缘计算网关&#xff0c;特别是BL340系列&#xff0c;凭借其强大的性能和灵活的…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求&#xff0c;关于SQL高可用优化&#xff0c;需要优化项目中的SQL&#xff0c;提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

SPI总结

1.前言 1.1 SPI简介 SPI全称Serial Peripheral Interface&#xff0c;串行外设接口&#xff0c;是一种用于连接外设的全双工通信总线。主机和从机支持一对一或一对多通讯连接。 图1 SPI物理层通讯连接 表1 Signal description 1.2 SPI特征 串行&#xff0c;每个时钟周期只传…

RM服务器研究(一)

客户端默认端口是10100&#xff1a; MultiPort.dll BOOL sub_10001070() { UINT v0; // esi BOOL result; // eax CHAR KeyName; // [espCh] [ebp-10Ch] DWORD flOldProtect; // [esp10h] [ebp-108h] CHAR Buffer; // [esp14h] [ebp-104h] char v5; // [esp15h] [e…

每日论文6—16ISCAS一种新型低电流失配和变化电流转向电荷泵

《A Novel Current Steering Charge Pump with Low Current Mismatch and Variation》16ISCAS 本文首先介绍了传统的current steering charge pump&#xff0c;如下图&#xff1a; 比起最简单的电荷泵&#xff0c;主要好处是UP和DN开关离输出节点较远&#xff0c;因此一定程度…

linux中怎么一次提交多条命令

在Linux上&#xff0c;如果你想要多条命令一起运行&#xff0c;有几种方式可以实现&#xff0c;但具体使用哪种方式取决于你希望这两条命令如何并行或顺序执行。 1、顺序执行&#xff1a;如果你希望第一条命令执行完毕后&#xff0c;再执行第二条命令&#xff0c;你可以简单地…

echarts 导出pdf空白原因

问题阐述 页面样式&#xff1a; 导出pdf: 导出pdf&#xff0c;统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制&#xff0c;而echarts用canvas绘制&#xff0c;canvas内部内容不会进行复制&#xff0c;只会复制canvas节点&#xff0c;因此导出pdf空白。 解决…

C语言VS实用调试技巧

文章目录 一、什么是bug?二、什么是调试&#xff1f;三、Debug和Release四、VS调试快捷键4.1环境准备4.2调试快捷键 五、监视和内存观察5.1监视5.2内存 六、调试举例七、编程常见错误归类7.1编译型错误7.2链接型错误7.3运行时错误 一、什么是bug? &#x1f34e;bug本意是 “…

【珠海一号卫星】

珠海一号卫星 珠海一号卫星星座是由珠海欧比特宇航科技股份有限公司发射并运营的商业遥感微纳卫星星座&#xff0c;是中国首家由民营上市公司建设并运营的卫星星座。以下是对珠海一号卫星的详细介绍&#xff1a; 一、基本概况 组成&#xff1a;整个星座由34颗卫星组成&…

centos安装nginx指定pcre位置

载PCRE源码。您可以从PCRE的官方网站&#xff08;https://www.pcre.org/&#xff09;获取最新版本的源码。例如&#xff0c;如果您要安装PCRE 8.44&#xff0c;可以使用以下命令下载并解压 wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz tar -zxvf pcre-8.44.tar.gz编…

django drf 过滤器

排序 代码&#xff1a; from rest_framework.generics import ListAPIView from rest_framework.filters import OrderingFilterclass TestListAPIView(ListAPIView):queryset models.Course.objects.filter(is_deleteFalse).all()serializer_class serializers.TestModelS…

Floyd--Warshall算法——最短路径

弗洛伊德算法&#xff08;Floyd&#xff09; 简介&#xff1a; 主要用来解决任意两点间的最短路径的一种算法&#xff08;不能解决带有“负权回路”即“负权环”的图&#xff0c;因为它没有最短路径&#xff09; 时间复杂度为O(N3)&#xff0c;空间复杂度为O(N2) 算法思路&a…

Solidity——抽象合约和接口详解

&#x1f680;本系列文章为个人学习笔记&#xff0c;目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣&#xff0c;望见谅。 Solidity中的抽象合约和接口详解 目录 什么是抽象合约&#xff1f;抽象合约的语法接口&#xff08;Interface&#xff09;的定义接口的语…

【深度学习基础模型】Variational Autoencoders (VAE) 详细理解并附实现代码。

【深度学习基础模型】Variational Autoencoders (VAE) 详细理解并附实现代码 【深度学习基础模型】Variational Autoencoders (VAE) 详细理解并附实现代码 文章目录 【深度学习基础模型】Variational Autoencoders (VAE) 详细理解并附实现代码1.Variational Autoencoders (VAE…

3D Gaussian Splatting 学习笔记

目录 突破3DGS泛化和实用壁垒&#xff01;GS-Net&#xff1a;首个具有跨场景泛化能力的即插即用3DGS模块 升级版 SGD 一问读懂3D Gaussian Splatting 3DGS高斯泼溅技术 系统首先对 SfM 点云进行初始化 代码概要 突破3DGS泛化和实用壁垒&#xff01;GS-Net&#xff1a;首个…

通过 OBD Demo 体验 OceanBase 4.3 社区版

本文作者&#xff1a;马顺华 引言 OceanBase 4.3 是一个专为实时分析 AP 业务设计的重大更新版本。它基于LSM-Tree架构&#xff0c;引入了列存引擎&#xff0c;实现了行存与列存数据存储的无缝整合。这一版本不仅显著提升了AP场景的查询性能&#xff0c;同时也确保了TP业务场景…