树与二叉树的概念 性质及其存储结构

news2024/11/25 0:30:47

💓博主csdn个人主页:小小unicorn
⏩专栏分类:数据结构
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

树与二叉树

  • 树的概念与结构:
    • 树的概念
    • 树的特点:
    • 树的专有名词:
    • 树的表示:
    • 树在实际中的运用(表示文件系统的目录树结构)
  • 二叉树概念及结构
    • 概念:
    • 特点:
      • 现实中的二叉树:
      • 自然界中的二叉树:
      • 数据结构中的二叉树
    • 特殊的二叉树:
    • 二叉树的性质(很重要!!!):
  • 二叉树的存储结构
    • 顺序结构:
    • 链式结构:
      • 代码实现:

树的概念与结构:

树的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
在这里插入图片描述
在这里插入图片描述

树的特点:

有一个特殊的结点,称为根结点,根节点没有前驱结点。

除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继

因此,树是递归定义的。

树的专有名词:

在这里插入图片描述

结点的度:一个结点含有的子树的个数称为该结点的度。
叶结点(终端结点):度为0的结点称为叶结点。
非终端结点(分支结点):度不为0的结点。
父结点(双亲结点):若一个结点含有子结点,则这个结点称为其子结点的父结点。
子结点(孩子结点):一个结点含有的子树的根结点称为该结点的子结点。
兄弟结点:具有相同父结点的结点互称为兄弟结点。
树的度:一棵树中,最大的结点的度称为树的度。
结点的层次:从根开始定义起,根为第一层,根的子结点为第二层,以此类推。
树的高度(树的深度):树中结点的最大层次。
堂兄弟结点:双亲在同一层的结点互称为堂兄弟结点。
结点的祖先:从根到该结点所经分支上的所有结点。
子孙:以某结点为根的子树中任一结点都称为该结点的子孙。
森林:由m(m>0)棵互不相交的树组成的集合称为森林。

树的表示:

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法孩子表示法孩子双亲表示法以及孩子兄弟表示法
等。

我们这里就简单的了解其中最常用的孩子兄弟表示法

typedef int DataType

struct Node
{
	struct Node* firstChild;   //第一个孩子结点
	struct Node* nextBrother;  //指向下一个兄弟结点
	DataType data;             //结点中的数据域
};

对于任意树,我们都可以用孩子兄弟法访问到树中的每一个结点
在这里插入图片描述

树在实际中的运用(表示文件系统的目录树结构)

在这里插入图片描述

二叉树概念及结构

概念:

二叉树是n个结点的有限集合,该集合或者为空或者是由一个根结点加上两棵分别称为左子树和右子树的二叉树组成

当集合为空时,称该二叉树为空二叉树
在这里插入图片描述

特点:

1.每个结点最多有两个棵子树,即二叉树不存在度大于2的结点。
2.二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树

注意:对于任意的二叉树都是由以下几种情况复合而成的:
在这里插入图片描述

现实中的二叉树:

在这里插入图片描述
在这里插入图片描述

自然界中的二叉树:

在这里插入图片描述

数据结构中的二叉树

在这里插入图片描述

特殊的二叉树:

  1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。

  2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

在这里插入图片描述
总结
满二叉树:若树的深度为K,那么它的每一层的结点数必须都是满的。

完全二叉树:若数的深度为K,那么它的前K-1层的结点数必须都是满的,第K层的结点数可以不是满的但是从左到右必须是连续的。

二叉树的性质(很重要!!!):

性质一:若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有2(i-1)个结点。

性质二:若规定根结点的层数为1,则深度为h的二叉树的最大结点数为2(h-1)个。

性质三:对任何一棵二叉树,如果度为0的叶结点个数为n0,度为2的分支结点个数为n2,则有n0 = n2+1。

性质四:若规定根结点的层数为1,则具有N个结点的满二叉树的深度h = log2(N+1)。

性质五:对于具有N个结点的完全二叉树,如果按照从上至下、从左至右的数组顺序对所有结点从0开始编号,则对于序号为i的结点:

1.若 i > 0,则该结点的父结点序号为:( i - 1) / 2;若 i = 0,则无父结点。
2.若2i + 1 < N,则该结点的左孩子序号为:2i + 1;若2i + 1 >= N,则无左孩子。
3.若2i + 2 < N,则该结点的右孩子序号为:2i + 2;若2i + 2 >= N,则无右孩子。

在这里插入图片描述

二叉树的存储结构

顺序结构:

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。

二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

链式结构:

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系

通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。

链式结构又分为二叉链和三叉链,目前我们学习中一般都是二叉链,等学到红黑树等知识时候会用到三叉链。
在这里插入图片描述

在这里插入图片描述

代码实现:

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
 struct BinTreeNode* _pLeft; // 指向当前节点左孩子
 struct BinTreeNode* _pRight; // 指向当前节点右孩子
 BTDataType _data; // 当前节点值域
}


// 三叉链
struct BinaryTreeNode
{
 struct BinTreeNode* _pParent; // 指向当前节点的双亲
 struct BinTreeNode* _pLeft; // 指向当前节点左孩子
 struct BinTreeNode* _pRight; // 指向当前节点右孩子
 BTDataType _data; // 当前节点值域
}

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

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

相关文章

ROS2 从头开始​​:第6部分 - ROS2 中的 DDS,用于可靠的机器人通信

一、说明 在这篇文章中,我们将重点关注 ROS 2的通信栈DDS,其中这是介于管理节点通信与控制节点通信环节,是上位机决策体系与下位机的控制体系实现指令-执行-反馈的关键实现机制。 二、ROS工程的概念框架 现代机器人系统非常复杂,因为需要集成各种类型的传感器、执行器和其…

pygame - 贪吃蛇小游戏

蛇每吃掉一个身体块&#xff0c;蛇身就增加一个长度。为了统一计算&#xff0c;界面的尺寸和游戏元素的位置都是身体块长度的倍数 1. 上下左右方向键&#xff08;或者ASDW键&#xff09;控制蛇的移动方向 2. 空格键暂停和继续图片文件&#xff0c;复制到项目的asset\img目录下i…

每天只需这样做,轻松提升你的演讲口才

锻炼自己的演讲口才需要长期的练习。以下几点方法可以帮助你提高&#xff1a; 1. 多观看优秀演讲视频。观看他人优秀的演讲&#xff0c;可以学习到他人的语调、节奏、动作表情等技巧&#xff0c;这对我们提高自己的很有帮助。例如可以观看TED演讲、企业年会等形式的演讲视频。…

从零开始的C++(二)

1.为什么C有函数重载但是C没有函数重载&#xff1f; 这涉及了C、C的函数命名习惯&#xff0c;在C语言编译阶段&#xff0c;函数的命名不会受其参数列表的影响&#xff0c;即只要函数名相同编译出的函数名就相同。但在C中&#xff0c;函数命名受影响&#xff0c;如下图所示&…

uboot启动流程-uboot链接接脚本

一. uboot 启动流程 本文我们来详细的分析一下 uboot 的启动流程&#xff0c;理清 uboot 是如何启动的。通过对 uboot 启动流程的梳理。 我们就可以掌握一些外设是在哪里被初始化的&#xff0c;这样当我们需要修改这些外设驱动的时候就会心里有数。另外&#xff0c;通过分析 …

华为云云耀云服务器L实例评测 | 实例场景体验之搭建个人博客:通过华为云云耀云服务器构建个人博客

华为云云耀云服务器L实例评测 &#xff5c; 实例场景体验之搭建个人博客&#xff1a;通过华为云云耀云服务器构建个人博客 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…

COCO 数据集 人体关键点格式

图片与标注数据在 COCO官网 均提供下载 标注格式 COCO 的标注中包含 4 个部分/字段&#xff0c;"info" 描述数据集&#xff0c;"licenses" 描述图片来源&#xff0c;"images" 和 "annotations" 是主体部分 "images" 部分…

数学术语之源——纤维(fiber)

1. 数学术语“纤维”(英英“fibre”,美英“fiber”)在数学中的起源 fiber[ˈfaɪbə(r)]这个词始于14世纪晚期&#xff0c;词义为“肝叶的一瓣(a lobe of the liver)”,也指“内脏(entrails)”。来自中世纪拉丁语“fibre”,其又源自拉丁语“fibra”,词义为“纤维(a fiber)、细…

Logistic map混沌掩盖信号

开学接触了一些有关混沌知识的学习&#xff0c;阅读量一些混沌通信的论文&#xff0c;对于混沌掩盖信号以确保加密通信有一定的兴趣。混沌的产生我选用的是logistic map映射产生混沌&#xff0c;主要就是一个递推公式&#xff1a; 对于这样一个式子&#xff0c;可以看出&#x…

300元开放式耳机哪款好、百元开放式耳机推荐

我是一个非常喜欢戴着耳机出门的社恐宅男&#xff0c;但看了一些文章后发现长期戴耳机对耳朵也是有危害的&#xff0c;比如长时间佩戴耳机容易导致耳朵潮湿&#xff0c;从而增加细菌滋生的风险&#xff0c;其次&#xff0c;长时间高音量使用耳机可能会造成听力损伤以及长期佩戴…

功率放大器有哪些要求和标准参数

功率放大器是一种常见的电子设备&#xff0c;用于将输入信号增强到更高的功率级别。为了满足不同应用需求&#xff0c;功率放大器需要符合一些特定的要求和标准参数。 在现代电子设备中&#xff0c;功率放大器广泛应用于各种领域&#xff0c;如通信、音频放大、射频放大等。它们…

Vue之transition组件

Vue提供了transition组件&#xff0c;使用户可以更便捷地添加过渡动画效果。 transition组件 transition组件也是一个抽象组件&#xff0c;并不会渲染出真实dom。Vue会在其第一个真实子元素上添加过渡效果。 props render 这里将render分为两部分&#xff0c;第一部分界定真…

Golang的性能优化

欢迎&#xff0c;学习者们&#xff0c;来到Golang性能优化的令人兴奋的世界&#xff01;作为开发者&#xff0c;我们都努力创建高效、闪电般快速的应用程序&#xff0c;以提供出色的用户体验。在本文中&#xff0c;我们将探讨优化Golang应用程序性能的基本技巧。所以&#xff0…

XPD738协议系列-USB Type-C PD 和 Type-A 双口控制器

产品描述&#xff1a; XPD738 是一款集成 USB Type-C、USB Power Delivery&#xff08;PD&#xff09;2.0/3.0 以及 PPS、QC3.0/QC3.0/QC2.0 快充协议、华为 FCP/SCP/HVSCP 快充协议、三星 AFC 快充协议、BC1.2 DCP 以及苹果设备 2.4A 充电规范的多功能 USB Type-C 和 Type-A …

通达信筹码获利比例选股指标公式,寻找二次探底

获利比例的意思是当前价格的获利盘比例&#xff0c;从筹码分布理论的角度来说&#xff0c;获利比例越低&#xff0c;说明越少的人处于获利状态&#xff1b;获利比例越高&#xff0c;说明越多的人处于获利状态。当然这只是理论分析&#xff0c;获利比例是通过历史数据按照一定的…

蛋糕烘焙外卖配送小程序商城的效果是什么

随着人们消费水平提升&#xff0c;蛋糕烘焙成为餐饮行业重要的细分赛道之一&#xff0c;市场中大小品牌众多&#xff0c;同时又相对聚集&#xff0c;由于城市中消费者众多&#xff0c;每个商家都有一定生意&#xff0c;但想要破圈进一步增长却很困难&#xff0c;加之线上电商冲…

华为云云耀云服务器L实例评测 | 实例评测使用之软件性能评测:华为云云耀云服务器下的 Redis 性能评测

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之软件性能评测&#xff1a;华为云云耀云服务器下的 Redis 性能评测 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云…

SW免安装的toolbox只读问题

把SOLIDWORKSDATA 整体复制到另外的目录&#xff0c;然后这里设置目录位置。不然原始位置有只读属性

ngrok内网穿透以及原理

〇、前言 如果要想在本地部署一个服务&#xff0c;且要向不在本局域网的用户展示我们的服务&#xff0c;此时就要用内网穿透工具&#xff0c;把我们的服务变成公网服务。ngrok就是一个很好的工具&#xff0c;操作简单&#xff0c;服务稳定。 一、使用 ngrok 1. 下载ngrok 下…

nextTick源码解读

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;Vue &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 nextTick原理nextTicktimerFuncflushCallbacks 异步更新流程updatequeueWatcherflushS…