数据结构(四)—— 堆和二叉树(上)

news2024/10/6 22:33:45

制作不易,三连支持一下呗!!!

文章目录

  • 前言
  • 一、树的概念及结构
  • 二、二叉树的概念及结构
  • 总结


前言

这篇博客我们将进行更加复杂的一种数据结构的学习——树形结构。


一、树的概念及结构

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合,把它叫做树,因为它的形状看起来像一颗倒挂的数,也就是说它是根朝上,而叶子朝下的。

  • 有一个特殊的结点,称为根节点,根节点没有前驱节点。
  • 除根节点外,其余节点被分为M(M>0)个互不相交的集合T1,T2,……Tn。其中每一个集合Ti(1<=i<=n)又是一颗结构与树类似的子树。
  • 因此,树是递归定义的

     注意:树形结构中,子树之间不能有交集,否则就不是树形结构。

      

     树中的基本概念:

  1. 节点的度:一个节点含有的子树的个数称为该节点的度。如上图 根节点的度为3
  2. 叶结点或终端结点:度为0的节点称为叶结点,如上图5节点为叶结点。(没有孩子的节点)
  3. 非终端结点或分支节点:度不为0的结点,如上图2,3,4节点。
  4. 双亲节点或父节点:若一个节点含有子节点,那么这个节点称为其子节点的父节点,如上图2是5的父节点
  5. 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点,如上图中5是2的子节点
  6. 兄弟节点:具有相同父节点的节点互称为兄弟节点,如上图2,3,4互为兄弟节点
  7. 树的度:一棵树中,最大的节点的度称为节点的度,如上图,树的度为3
  8. 节点的层次:从根开始定义起,根为第一层,根的子节点为第二层,依此类推
  9. 树的高度或深度:树中节点的最大层次,如上图,树的高度为3
  10.  堂兄弟节点:双亲在同一层的节点互为堂兄弟节点
  11. 节点的祖先:从根到该节点所经分支上的所有节点,如上图1是所有节点的祖先
  12. 子孙:以某节点为根的子树中任一节点都称为该节点的子孙,如上图所有节点都是1的子孙
  13. 森林:由m(m>0)棵互不相交的树组成的集合叫做森林

树型结构的表示:

1.顺序表表示法

假设已知一棵树的度为N,则每个节点中可以定义一个N个元素的指针数组,数组中的每一个指针都指向这个节点的孩子。但是只是这样的结构会导致很大的空间浪费,有很多节点的孩子是没有N个的,可能都没有孩子节点。所以我们类似顺序表定义一个size和ccapacity来记录当前节点的孩子节点的个数不够的话就要扩容。

struct TreeNode
{
	int val;
	//顺序表
	struct TreeNode** a;
	int size;
	int capacity;
};

但是这种表示方法并不常用。 

2.左孩子右兄弟表示法

树的结构如下:

//左孩子右兄弟
struct TreeNode
{
	int val;
	struct TreeNodde* leftChild;
	struct TreeNodde* nextBrother;

};

不管有多少兄弟节点,都只记录它的第一个孩子节点。没有孩子或兄弟就指向NULL。

这样就可以讲这棵树的所有节点都遍历一遍。

这种表示方法,避免了空间的浪费,不管有多少孩子 ,都只需要记录两个指针即可。

3.双亲表示法(只适用于完全二叉树)

这种表示方法是将树存放在一个数组中,每个节点保存一份数据和它的双亲节点在数组中的下标。

如上图那棵树以双亲表示法表示的图例:

这也体现了逻辑结构和物理结构不一定是一致的。 当然,根节点也不一定存在下标为0处。

二、二叉树的概念及结构

1.概念

二叉树:每个节点最多有两个孩子节点的树。

注:空树也是二叉树!!!

1.二叉树不存在度大于2的节点。

2.二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。

特殊的二叉树:

满二叉树:一个二叉树,如果每一个节点的度都达到最大值,那么它就是满二叉树,也就是说,假设一颗满二叉树的层数为K,那么它的总节点数为2^k-1.

完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树的概念是由满二叉树引出的,对于深度为K的,有n个节点的二叉树,当且仅当其每一个节点都与深度为K的满二叉树中编号为1~n的节点一一对应时称之为完全二叉树,特别的,满二叉树是一种特殊的完全二叉树。

以上是两组经典的对比,可以帮助我们更好的理解它们的区别! 

2.二叉树的存储结构

1.顺序存储(数组)(建议适用于完全二叉树)

一层一层挨个按顺序存储到数组中,物理结构上是数组,逻辑结构上是完全二叉树

这样存储之后父节点和子节点之间的下标之间是建立了一种关系的:

leftchild=2*parent+1

rightchild=2*parent+2

parent=(child-1)/2

如果不是完全二叉树,则要把空位置在数组中空出来,这样才满足上述规律!!!

2.链式存储

结构:一个节点中存储两个节点(左右孩子)

struct TreeNode
{
	int val;
	struct TreeNodde* leftChild;
	struct TreeNodde* rightChild;

};


总结

二叉树(上)介绍了树形结构中的一些概念和结构,下篇博客我们将来利用这些结构来实现二叉树

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

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

相关文章

API攻击为啥盛行,企业应该如何防范

一.API接口到底是什么 API,中文名称叫应用程序编程接口,是现代移动、SaaS 和 Web应用程序的一个关键组成部分。听起来很晦涩难懂,但其实我们每个人的生活都会接触 API:早上出门,打开手机看看天气,天气APP需要通过 API 提取数据;到了公司,被安排出差,赶紧上网查票,购票网站更新…

Windows 虚机扩容C盘

Windows 虚机扩容C盘 操作思路1、新增磁盘容量2、划分磁盘空间3、扩容对应盘 操作步骤 操作思路 1、新增磁盘容量 2、划分磁盘空间 3、扩容对应盘 操作步骤 1、虚机新增磁盘空间 先确认宿主机是否有足够空间&#xff0c;有足够空间后&#xff0c;编辑虚机&#xff0c;增加…

深入探索Android应用数据共享之ContentProvider

本文将深入探讨Android开发中非常重要的数据共享机制 - ContentProvider。 主要内容包括: ContentProvider的基本定义及特点如何实现一个自定义的ContentProviderContentProvider对外提供的功能以及对外部应用的权限控制对ContentProvider的一些常见使用场景使用ContentProvi…

探索网站支付系统的奥秘,从Vue3和Spring Boot开始(入门级项目实战+在线教程)附赠项目源码!

你是否曾经在购物时&#xff0c;对着电脑屏幕前的“支付成功”四个字感到好奇&#xff1f;这背后的秘密究竟是什么&#xff1f; 今天&#xff0c;让我们一起揭开支付系统的神秘面纱&#xff0c;探索其背后的技术实现。 在这个基于Vue3和Spring Boot的支付项目实战中&#xff…

Docker 容器中 PHP 使用 Curl 访问本地服务异常

在 Docker 环境中&#xff0c;将应用程序和服务容器化是常见的做法&#xff0c;但是有时会遇到一些网络通信方面的问题。其中一个常见的问题是 PHP 容器无法使用 Curl 访问本地服务&#xff0c;这可能导致开发和调试过程中的困扰。 问题描述 通常情况下&#xff0c;我们会将 …

为什么Qt这么强大却不受欢迎?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Qt的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;虽然这个问题并不被广泛讨论&#xff0c;但我根…

Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise)

Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09; 目录 Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09;API 风格选项式API组合式API混合式 事件监听…

第二证券|1.73万亿“聪明钱”A股扫货买了什么?

跟着A股上市公司一季报披露收官&#xff0c;备受商场重视的险资、社保基金和QFII等各大组织持仓数据浮出水面。 Wind计算数据显现&#xff0c;719家A股上市公司的十大流通股股东有QFII身影&#xff0c;险资和社保基金分别现身754只和659只个股的前十大流通股股东&#xff0c;Q…

ECC 号码总结

1、问题背景 在手机开发过程中&#xff0c;经常遇见各种紧急号码问题&#xff0c;在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中&#xff0c;定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…

MinimogWP WordPress 主题下载——优雅至上,功能无限

无论你是个人博客写手、创意工作者还是企业站点的管理员&#xff0c;MinimogWP 都将成为你在 WordPress 平台上的理想之选。以其优雅、灵活和功能丰富而闻名&#xff0c;MinimogWP 不仅提供了令人惊叹的外观&#xff0c;还为你的网站带来了无限的创作和定制可能性。 无与伦比的…

CentOS 7 :虚拟机网络环境配置+ 安装gcc(新手进)

虚拟机安装完centos的系统却发现无法正常联网&#xff0c;咋破&#xff01; 几个简单的步骤&#xff1a; 一、检查和设置虚拟机网络适配器 这里笔者使用的桥接模式&#xff0c;朋友们可以有不同的选项设置 二、查看宿主机的网络 以笔者的为例&#xff0c;宿主机采用wlan上网模…

Could not resolve placeholder ‘xx.xxx.host’ in value “xxx“问题解决

Could not resolve placeholder ‘xx.xxx.host’ in value "xxx"问题解决 众多原因其中之一 springboot 项目&#xff0c;idea 配置apollo 时&#xff0c;运行指定了配置文件 uat 所以使用本地配置文件启动 时&#xff0c;一直去找uat 配置文件&#xff0c;结果自…

CSS引用

CSS定义 层叠样式表&#xff1a;&#xff08;Cascading Style Sheets,缩写为css&#xff09;,是一种样式表语言&#xff0c;用来描述HTML文档的呈现&#xff08;美化内容&#xff09; 书写位置&#xff1a;title标签下方添加style双标签&#xff0c;style标签里写入CSS代码 在s…

LVS 集群

一、集群和分布式 系统性能扩展方式&#xff1a; Scale UP&#xff1a;垂直扩展&#xff0c;向上扩展,增强&#xff0c;性能更强的计算机运行同样的服务 Scale Out&#xff1a;水平扩展&#xff0c;向外扩展,增加设备&#xff0c;并行地运行多个服务调度分配问题&#xff0c;…

OpenSPG docker 安装教程

文章目录 前言自述 一、OpenSPG1.介绍 二、安装步骤1.安装服务端2.客户端部署 前言 自述 我最近是想结合chatglm3-6b和知识图谱做一个垂直领域的技术规范的问答系统&#xff0c;过程中也遇到了很多困难&#xff0c;在模型微调上&#xff0c;在数据集收集整理上&#xff0c;在知…

RJ45网口温湿度传感器MQTT/http协议配云平台

产品概述 RJ45网口版主机 SC-GP-THLAN温湿度传感终端是上海数采物联网科技有限公司推出的一款基于网口有线传输&#xff0c;直流宽电压供电的通用型温湿度传感器&#xff0c;可采集环境中的温度、湿度数据。 网口温湿度终端广泛应用于工业、农业等温湿度测量场景。 服务理念…

阿里easyExcel -- excel单元格自定义下拉选择(升级版)

背景 很久很久以前写了一篇类似的文章 阿里easyExcel – excel下载/导出/读取 (单元格自定义下拉选择、不支持图片) &#xff0c;用了没多久就发现不好用&#xff0c;限制太多&#xff08;以后遇到你就知道了&#xff09;&#xff0c;然后就有了现在迟到很久的文章&#xff0c…

从U盘到云端:企业数据泄露的那些事

在企业的日常运营中&#xff0c;数据安全无疑是极为关键的一环。无论是U盘还是云&#xff0c;数据泄露事件的发生都可能导致企业的核心机密被窃取&#xff0c;甚至损害企业的商业利益和声誉。以下是关于从U盘到云端&#xff0c;企业数据泄露的一些常见情况和应对策略。 U盘&…

数据结构-线性表-应用题-2.2-12

1&#xff09;算法的基本设计思想&#xff1a;依次扫描数组的每一个元素&#xff0c;将第一个遇到的整数num保存到c中&#xff0c;count记为1&#xff0c;若遇到的下一个整数还是等于num,count,否则count--,当计数减到0时&#xff0c;将遇到的下一个整数保存到c中&#xff0c;计…

Android 终端查看CPU信息源码分析

代码如下&#xff1a; 终端获取信息&#xff08;左为H9&#xff0c;右为H5&#xff09; 觉得本文对您有用&#xff0c;麻烦点赞、关注、收藏&#xff0c;您的肯定是我创作的无限动力&#xff0c;谢谢&#xff01;&#xff01;&#xff01;