数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解

news2024/9/24 7:22:22

文章目录

  • 1.树
  • 2.二叉树
    • 2.1 二叉树的基本概念
    • 2.2 满二叉树
    • 2.3 完全二叉树
    • 2.4 二叉排序树
    • 2.5 平衡二叉树
  • 3.二叉树的存储结构
    • 3.1 二叉树的顺序存储
    • 3.2 二叉树的链式存储

1.树

树的基本概念

在这里插入图片描述
结点的度:指该结点的分支个数,如结点A的度为2
树的度:指树中最大的结点度数,如该树的度为3
祖先和子孙:对于某结点来说,从根到该结点所经的所有结点称为该结点的祖先。反之,以某结点为根的所有子树上的结点称为该结点的子孙。如路径ABEH,ABE是H的祖先,BEH是A的子孙。

2.二叉树

2.1 二叉树的基本概念

复习概念:m叉树 度≤m的树
等比数列求和公式:Sn=a1(1-qn)/(1-q)
树节点的度数即为该节点孩子的个数。

二叉树是度小于等于2的有序树。(左右子树顺序不能颠倒)

性质:

  • 对任意一棵二叉树,如果用n0表示叶子结点的数量,用n2表示度为2的结点的数量,则有n0=n2+1
  • 非空二叉树第k层最多有2k-1个结点
  • 深度为h的二叉树最多有2h-1个结点

推导
假设树中结点总数为n,则
n=n0+n1+n2 (二叉树结点总数=度为0的结点数+度为1的结点数+度为2的结点数)
n=n1+2n2+1(树的结点总数=总度数+1)总度数=n*度为n结点数之和(二叉树是0-2)
上面两个方程作差即得到n0=n2+1

二叉树的五种状态:
在这里插入图片描述

2.2 满二叉树

顾名思义:每一个非叶子结点的结点的度都是2
一棵高度为h,且含有2h-1个结点的树

推导:20+21+…2n=1(1-2n)(1-2)=2n-1

特点:
1️⃣只有最后一层有叶子结点
2️⃣不存在度为1度结点
3️⃣按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,结点i的父结点为⌊i/2⌋

2.3 完全二叉树

完全二叉树是指从左到右从上到下依次补满全部结点的树,停止于任意位置,序号一一对应。
结论:满二叉树是一种特殊的完全二叉树
在这里插入图片描述

特点:

  • 若完全二叉树的深度为h,则它的前h-1层全是满的
  • 只有最后两层可能有叶子结点,且最底层的叶子结点依次排列在最左边。
  • 最多只有一个度为1的点
  • 有n个结点的完全二叉树的深度⌊ log2n⌋+1⌈ log2n+1⌉

推导&解释
使用这两个公式都可以通过结点数计算出完全二叉树的高度
推导过程:⌈log2(n+1)⌉
上取整通过≤最大值证明出
结点n最大为2h-1,必然也肯定大于下一高度的最大值2h-1-1
2h-1-1<n≤2h-1
中间值+1后,取log2,并且上取整,满足该条件
⌈log2(n+1)⌉

推导过程:⌊log2n⌋+1
上取整通过≥最小值证明出
结点n最少的可能就是上一层满了,下一层一个,即2h-1-1+1=2h-1,肯定小于结点最大值+1
2h-1≤n<2h
取log2,下取整,再+1,即证毕,⌊log2n⌋+1

  • 对于完全二叉树,由结点数就可以推出各个度的结点数的个数。(n0,n1,n2

推导:记忆是困难的,通过推导辅助记忆
(1) 完全二叉树最多只有一个度为1度结点(完全二叉树的性质)推出 完全二叉树度为1度结点要么是0,要么是1.
(2)n0=n2+1推出n0+n2=n2+1+n2=2n2+1推出一定是奇数
最终推,若完全二叉树有2k个结点(偶数)个结点,即n0+n1+n2=偶数,n0+n2=奇数,所以n1=1,n0=k,n2=k-1.若是奇数个结点(2k-1)个结点,n1=0,n0和n2同偶数,写法是不变的

2.4 二叉排序树

左子树结点值<根节点值<右子树结点值
在这里插入图片描述

2.5 平衡二叉树

平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1

3.二叉树的存储结构

3.1 二叉树的顺序存储

用一组连续存储单元自上而下,自左到右存储树上的结点元素。比较适合完全二叉树和满二叉树。对于一般的二叉树,需添加一些不存在的空结点。

#define MaxSize 100
struct TreeNode{
ElemType value; //结点中的数据元素
bool isempty;   //结点是否为空,当所存储的二叉树不是完全二叉树的时候使用这个。
}
TreeNode t[MaxSize];

在这里插入图片描述

如果是非完全二叉树,那么为了找到他的左孩子,右孩子,父结点,我们仍要按照完全二叉树的存储结构让序号对应起来,唯一不同的点是,我们无法根据序号,判定是否存在左孩子还是右孩子了,所以我们使用bool类型isempty,来实现判断

3.2 二叉树的链式存储

typedef struct BiTNode{
	ElemType data;
	struct BiTNode *lchild,*rchild; //左孩子指针,右孩子指针
}BiTNode,*BiTree;

在二叉链表中,链表的头指针T指向根节点。T->data表示根结点的值
在这里插入图片描述

n个结点的二叉链表共有n+1个空链域

每个结点都有2个指针(链域),一共有2n个链域,但是使用的链域是结点数-1,即n-1,所以2n-n+1=n+1,有n+1个空链域,这些空链域用来构造线索二叉树

但是如果想找到指定结点的父节点,只能从根开始遍历寻找,
改进方法是加上一个父节点指针,struct BiTNode *parent; 父节点指针,改进之后的链表就是三叉链表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084446.html

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

相关文章

DHU 二维数组 暗恋

思路及代码 蛮力算法 验证是否是正方形的方法是简单的 但是蛮力下来写的不优雅 第一版超时了&#xff0c;第二版改了一点点&#xff0c;把一个循环换成了加加减减 #include<iostream> using namespace std;int main(){ //input R,C int 1< <200 //input R*C矩阵…

ceph-rgw zipper的设计理念(1)

0.前言 RGW在ceph存储中的主要作用是提供S3和Swift的协议访问支持。Zipper工作主要是将RGW分为协议部分和后端部分。协议部分还是支持S3和Swift协议&#xff0c;包括身份认证、协议参数解析和op操作解析等等&#xff1b;后端部分主要是对接不同的存储&#xff0c;比如rados&am…

利用OpenCV根据图片识别环境的亮度

一、前言 在当代数字化转型的浪潮中&#xff0c;计算机视觉技术无疑占据了举足轻重的地位&#xff0c;其应用范围之广&#xff0c;影响力之深&#xff0c;已成为推动社会进步的关键力量之一。而OpenCV&#xff0c;作为计算机视觉领域的佼佼者&#xff0c;凭借其卓越的性能与广…

强推!必看!!由中国信通院发布的汇聚99个大模型优秀应用案例集!附219页PDF文件下载

2024 年是大模型深入赋能千行百业&#xff0c;融入实体经济&#xff0c;助力科技创新的一年。截至今年5月&#xff0c;我国国产大模型的数量已经超过 300个&#xff0c;预示着大模型在各行业场景的创新应用和深度拓展&#xff0c;对培育新质生产力、高水平赋能新型工业化、推动…

第100+23步 ChatGPT学习:概率校准 Sigmoid Calibration

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

java中超级重要的SPI机制

SPI机制是理解各个框架集成的重要思想&#xff0c;只用理解了SPI才能理解框架的集成和扩展。直观的就是SPI机制可以让你更好的理解springboot集成各个扩展。 废话不多说&#xff01;&#xff01; 1.什么是spi机制&#xff1f; Spi机制是java提供的一种服务发现机制&#xff0…

企业常用的10款主流图纸加密软件排行榜|企业图纸防泄密

图纸是企业的重要资产&#xff0c;其安全性直接关系到企业的核心竞争力。下面为大家介绍10款主流的图纸加密软件&#xff0c;每款软件都有其独特的功能和优势&#xff0c;帮助企业有效防止图纸泄密。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为企业用户设计的图纸加密解…

全球石油巨头哈里伯顿因网络攻击被迫关闭系统

美国能源服务巨头哈里伯顿公司在周五向联邦监管机构提交的文件中表示,在本周遭受网络攻击后,该公司主动关闭了某些系统以“帮助保护它们”。 该公司在提交给美国证券交易委员会的文件中表示,周三该公司获悉“未经授权的第三方获得了其系统某些部分的访问权限”,并正在与外…

如何开启让设备获取到IPv6?

前言 现在许多小伙伴拉的宽带基本上都是光猫进行拨号的。这个就导致很多小伙伴不知道如何让设备获取IPv6。 但好像还有小伙伴分不清光猫拨号和光猫桥接的区别&#xff0c;其实它们的区别就在于让设备直连光猫的网口或者光猫的Wi-Fi&#xff0c;就会出现两种情况&#xff1a; …

实战派六西格玛:培训只是热身,应用才是关键!

在当今竞争激烈的市场环境中&#xff0c;六西格玛作为一套卓越的质量管理策略与工具&#xff0c;其影响力已远远超越了单纯的制造领域&#xff0c;渗透至各行各业的运营管理之中。然而&#xff0c;许多企业在追逐六西格玛光环的过程中&#xff0c;却常常偏离了其核心轨道&#…

中国全球投资追踪相关数据(2005-2023年)

中国全球投资追踪的相关数据可以为了解中国在全球范围内的投资活动提供重要视角。根据美国企业研究所&#xff08;American Enterprise Institute&#xff0c;AEI&#xff09;编制的《中国全球投资追踪》数据库&#xff0c;该数据库详细追踪了2005年至2023年间中国的海外直接投…

wx.updateAppMessageShareData 自定义分享内容安卓无效

记录wx.updateAppMessageShareData 自定义分享内容安卓无效 bug&#xff0c;主要是因为微信公众平台要配置分享的链接域名。 情况微信公众号使用wxjsdk后分享api全都注入成功&#xff0c;自定义分享内容时ios正常安卓分享出去的是当前页面的url。 主要原因在于你自定义这个分享…

在linux 中如何将.c 文件转换为可执行文件

目录 一、引言 二、准备工作 三、编译单个.c 文件 1.预处理 2.编译 3.汇编 4.链接 四、编译多个.c 文件 五、调试和优化 六、总结 一、引言 在 Linux 环境下进行 C 语言编程时&#xff0c;将 .c 文件转换为可执行文件是一个关键的步骤。这个过程涉及到使用编译器和一…

携程:从MySQL迁移OceanBase的数据库发布系统实践

作者简介&#xff1a;杨晓军 现就职于携程的数据库团队&#xff0c;主要负责携程数据库的研发与管理&#xff0c;专注于提升数据库的稳定性。 自分布式关系型数据库OceanBase开源以来&#xff0c;携程已经在线上环境中进行了广泛的应用&#xff0c;取代了原先以MySQL为主力的业…

虚幻5|技能栏优化(1)---优化技能UI,并添加多个技能

一.添加多一个技能格子并进行初始化清楚 1.打开技能UI把原先的事件构造后面的蓝图&#xff0c;全部选中&#xff0c;右键创建一个函数&#xff0c;命名为初始化 2.添加以下两个蓝图&#xff0c;用于清楚技能格子内容 2.在之前&#xff0c;事件构造后面的蓝图&#xff0c;不需…

人工智能是如何预测足球比赛的?看完这篇文章,你就全懂了!AutoPrediction

2024年欧洲杯开赛至今&#xff0c;德叔已经用人工智能预测了小组赛阶段的36场比赛&#xff0c;以及淘汰赛阶段的8场比赛&#xff0c;并且通过在网络上的发文&#xff0c;记录了所有这些比赛的预测结果。这些文章引来了不少朋友的围观&#xff0c;也让很多人对人工智能预测球赛这…

收藏夹里的“小网站”被误报违规不让上怎么办?如何将Chrome和Edge安装到 D 盘(含用户数据),重装系统也不会丢失收藏夹和密码?

当你用国产浏览器访问网站的时候&#xff0c;有时候会显示这个&#xff1a; 如果确实是违规网站&#xff0c;不让访问也没什么&#xff0c;但是很多都是误报啊&#xff0c;你这样直接来个大红横幅&#xff0c;还让人活不&#xff1f; 那遇到这种误报应当怎么办呢&#xff1f;有…

echarts 中 鼠标悬浮上加单位

tooltip: {trigger: "axis",valueFormatter: function (value: any) {return value "℃";},}, 效果&#xff1a;

开放式耳机的优缺点?开放式耳机王者带你一探究竟

盛夏时节&#xff0c;天气越来越热&#xff0c;小伙伴们都在抱怨&#xff0c;实在没法戴口罩了。实际上&#xff0c;大家只关注了呼吸&#xff0c;却忽视了一个问题&#xff0c;其实&#xff0c;我们的耳朵也是要“呼吸”的&#xff0c;闷热的天气里&#xff0c;长时间佩戴入耳…

S2P销讯通-主数据对于客户关系管理系统的重要性

由于业务发展&#xff0c;各大企业的业务系统经历了从无到有&#xff0c;从简单到复杂&#xff0c;从而形成了一个又一个的业务系统&#xff0c;比如OA、HR、CRM、ERP等等。 主数据在客户关系管理系统&#xff08;CRM&#xff09;中扮演着至关重要的角色。主数据是指那些描述企…