二叉树(9.7)

news2025/7/20 22:29:44

目录

1.树概念及结构

1.1树的概念

 1.2 树的相关概念

1.3 树的表示

2.二叉树概念及结构

2.1概念

2.2 特殊的二叉树

2.4 二叉树的存储结构

3.二叉树顺序结构及实现

3.1 二叉树的顺序结构

3.2 堆的概念及结构 

1.树概念及结构

1.1树的概念

前面我们学习的都是组成简单的结构,它们存在一些优缺点。

例如:顺序表,它的本质是数组

链表

我们容易发现顺序表和链表本质上是互补的数据结构。

数组可以看作数据结构的一种基础,在它之上进行各种“加工”能够产生多种复杂的数据结构。

 上面提到的是简单的结构线性表,下面我们将认识更为复杂的结构,二叉树,多叉树。

为什么叫树,因为它的结构倒过来的形状像一棵树。

树是一种 非线性 的数据结构,它是由 n n>=0 )个有限结点组成一个具有层次关系的集合, 把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的
有一个 特殊的结点,称为根结点 ,根节点没有前驱结点
除根节点外, 其余结点被分成 M(M>0) 个互不相交的集合 T1 T2 …… Tm ,其中每一个集合 Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有 0 个或多个后继
因此, 树是 递归定义 的。

 为什么称树是递归定义的?

因为递归定义是将大问题一步一步化成类似的小问题最后解决并逐步返回的,而树也能拆成若干个子树,最终拆到叶节点就不能再拆了。

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

 1.2 树的相关概念

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的度为6

叶节点或终端节点 度为0的节点 称为叶节点; 如上图: B C H I... 等节点为叶节点
非终端节点或分支节点 度不为0 的节点; 如上图: D E F G... 等节点为分支节点
双亲节点或父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图: A B 的父节点
孩子节点或子节点 :一个节点含有的子树的根节点称为该节点的子节点; 如上图: B A 的孩子节点
(亲)兄弟节点 具有相同父节点 的节点互称为(亲)兄弟节点; 如上图: B C 是兄弟节点
树的度 :一棵树中, 最大的节点的度 称为树的度; 如上图:树的度为 6
节点的层次 :从根开始定义起, 根为第1层,根的子节点为第2层,以此类推
树的高度或深度 树中节点的最大层次 ; 如上图:树的高度为 4
堂兄弟节点 双亲在同一层(非同一个) 的节点互为堂兄弟;如上图: H I 互为兄弟节点
节点的祖先 :从根到该节点所经分支上的所有节点;如上图: A 是所有节点的祖先
子孙 :以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是 A 的子孙
森林 :由 m m>0 )棵互不相交的树的集合称为森林;

1.3 树的表示

树的存储方式

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

孩子表示法:

 兄弟孩子表示法:

typedef int DataType;
struct Node
{
 struct Node* _firstChild1; // 第一个孩子结点
 struct Node* _pNextBrother; // 指向其下一个兄弟结点
 DataType _data; // 结点中的数据域
};

如果想要找到一个节点的所有孩节点

先通过A节点的第一个孩子指针找到它的第一个孩节点,再通过这个孩节点的下一个兄弟指针找到下一个兄弟,重复找兄弟的过程,直到找不到兄弟(下一个兄弟指针为空),A的下一个兄弟指针也为空。

双亲表示法:

设下标 -1 代表没有父亲节点

两个节点在不在同一棵树,如何判断?

找根,根相同则在同一棵树。

2.二叉树概念及结构

2.1概念

一棵二叉树是结点的一个有限集合,该集合 :
1. 或者为空
2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成
注意:对于任意的二叉树都是由以下几种情况复合而成的:

从上图可以看出:
1. 二叉树不存在度大于 2 的结点,最多两个孩子,也可以是一个或零个。
2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。

2.2 特殊的二叉树

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

高度为 h 的满二叉树有 F(h)=2^h-1 个节点。

相反,假设一颗满二叉树的节点数为N个,那么 N=2^h-1,它就有 h=log2(N+1)层。

2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1n的结点一一对 应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。(假设它的高度为 h,前 h-1 层是满的,最后一层不一定满,但从左到右是连续的

假设完全二叉树的高度为 h ,它的节点数范围是

[2^(h-1),2^h -1](最少情况为 h-1 层多一个节点,最多为满二叉树)

2.4 二叉树的存储结构

将二叉树以数组的方式一层一层的存在数组中

对满二叉树,完全二叉树适合 | 对非满二叉树:不适合用数组存储

3.二叉树顺序结构及实现

3.1 二叉树的顺序结构

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

3.2 堆的概念及结构 

堆在内存中的区域划分:

堆的性质:
堆中某个节点的值总是不大于或不小于其父节点的值:
小堆:树中的任意一个父亲都<=孩子
大堆:树中的任意一个父亲都>=孩子
堆总是一棵完全二叉树

例:

画出 A 选项的堆图,答案显而易见。

底层:堆的物理(存储)结构上是数组,逻辑结构(想象出来的)上是完全二叉树。

大小堆的应用:

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

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

相关文章

如何建设企业级API网关

企业级API网关是现代软件架构中不可或缺的重要组成部分&#xff0c;它能够为整个系统提供安全可靠的入口&#xff0c;同时也是系统中不同业务模块之间交互的桥梁。API网关使得搭建一个新的应用服务变得简单、快捷、高效&#xff0c;同时&#xff0c;开发人员可以将更多的精力放…

白嫖必看!500条chatgpt提示词任你使用

你可能好奇&#xff0c;什么是prompt? 简单来说&#xff0c;prompt就是chatgpt的启动口令&#xff08;即提示词&#xff09;&#xff0c;是指通过特定问题来启动AI助手的创作。 使用它非常简单&#xff0c;只需在chatgpt前输入一句话或几个关键词&#xff0c;就能让AI助手理解…

leetcode:27. 移除元素(python3解法)

难度&#xff1a;简单 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑…

实现每栏中间穿插一个低于外部盒子高度的分割线

效果&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

第21期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

利用python绘制多个箱型图

文章目录 1. 图片2. 代码 1. 图片 图片示例如下所示&#xff1a; 2. 代码 代码如下所示&#xff1a; # Define the custom order based on atmospheric stability custom_order [vus_0, us_1, ne_2, ws_3, ws_4, s_5, s_6, s_7, vs_8, vs_9]# Step 1: Reorder the statis…

0基础学习VR全景平台篇第116篇:认识修图软件Photoshop

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 今天给大家讲解修图软件Photoshop&#xff0c;下面我们开始吧&#xff01; &#xff08;PS软件课程大纲&#xff09; 1.Photoshop是什么 发明人Adobe Photoshop&#xff0c;简称…

一分钟教你批量删除文件名中特定文字

怎么批量删除文件名中特定文字&#xff1f;在这个信息化的时代&#xff0c;我们每天会通过电脑处理大量的电子文件。无论是个人还是企业用户&#xff0c;在文件管理过程中&#xff0c;常常会遇到文件名混乱、重复或包含特定文字等问题。这些问题对于文件的检索和整理造成了很大…

【新增长100人研讨会】大客户管理:揭秘驱动业绩增长的关键策略

2023年10月26日&#xff0c;纷享销客在上海举办了一场名为《新增长100人研讨会&#xff1a;驱动业绩增长的大客户管理》的活动。该活动旨在探讨如何有效管理大客户&#xff0c;以实现企业的利润和可持续发展。新奥动力战略与数字化负责人胡昊和纷享销客制造行业解决方案总经理王…

对比解析php和go对JSON处理的区别

一、go 转化php数组代码 php程序 $str <<<EOF {"操作源":"任意","数据库":"任意","语句类型":"CREATE DATABASE&#xff1b;DROP DATABASE&#xff1b;ALTER DATABASE","影响行数":"不…

word文档中宏的使用(使用VBA批量修改表格样式)

1. 找到工具栏中“视图-》宏” 2. 选择“查看宏” 3. 创建/编辑宏 4. 修改“表格背景和设定字体大小”代码 如图&#xff1a; 代码块&#xff1a; Sub 修改表格字体()修改表格字体 宏For i 1 To ActiveDocument.Tables.CountDim t As TableSet t ActiveDocument.Tables(i)…

Maven第九章: Maven插件应用-FTP的插件

Maven第九章: Maven插件应用-FTP的插件 前言 本章内容重点:IDEA中 FTP的插件,以及FTP的插件在IDEA中连接和操作FTP服务器 操作应用。 背景 实际开发过程中,windows 安装相应的编辑工具不方便,我们需要实时上传到Linux服务进行编辑运行,查看效果,IDEA开发工具FTP插件,…

基于算术优化算法的无人机航迹规划-附代码

基于算术优化算法的无人机航迹规划 文章目录 基于算术优化算法的无人机航迹规划1.算术优化搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用算术优化算法来优化无人机航迹规划。 …

iPhone手机如何恢复删除的视频?整理了3个好用方法!

在日常生活中&#xff0c;我们会把各种各样的视频存放在手机里。这些视频记录着我们生活中的点点滴滴&#xff0c;每一帧都承载着珍贵的记忆。但如果我们不小心将这些重要视频删除了该怎么办&#xff1f;如何恢复删除的视频&#xff1f;本文将以iPhone手机为例子&#xff0c;教…

如何选一款适合自己的网页浏览器?-2023

常用的网页浏览器有哪些&#xff0c;电脑上所用的浏览器&#xff0c;通常也都有手机版本的。 网页浏览器是互联网的接口&#xff0c;最基础最核心的人机交互应用。 个人结论&#xff1a; 以mainland china为例&#xff1a; edge>firefox>opera>chrome 关闭不需要的…

彻底解决使用better-scroll不能滚动的问题

better-scroll这个组件不能说有多好&#xff0c;只能说可以拿来用用。但是很多人都碰到了引入这个组件以后&#xff0c;页面反而不能滚动的问题。今天我就来谈谈怎么彻底解决这个问题 首先要谈谈better-scroll页面滚动的原理&#xff1a; 如上图所示&#xff0c;只有当内容高度…

kafka入门教程,介绍全面

1、官网下载最新版本的kafka&#xff0c;里面已经集成zookeeper。直接解压到D盘 2、配置文件修改&#xff0c;config目录下面的zookeeper.properties. 设置zookeeper数据目录 dataDirD:/kafka_2.12-3.6.0/tmp/zookeeper 3、修改kafka的配置文件server.properties. 主要修…

数模竞赛那么累,究竟能给我带来什么?

国赛官网上有这么一句话&#xff1a;一次参赛&#xff0c;终生受益。 学生时代&#xff0c;我对这句话没啥感触。 因为刚开始学数模时感觉很没头绪&#xff0c;书也看不懂&#xff0c;论文也看不懂&#xff0c;看啥都看不懂。 比赛时题目看不懂&#xff0c;答案搜不到&#xf…

百度小程序DIY小程序源码系统+轻松创建百度小程序,实现个性化功能 带完整的搭建教程

在现在大环境的影响下&#xff0c;小程序已经成为人们日常生活中不可或缺的一部分。百度小程序作为国内领先的小程序平台之一&#xff0c;为广大开发者提供了丰富的开发资源和工具。今天源码小编就来给大家分享一款百度小程序DIY小程序源码系统。百度小程序DIY小程序源码系统是…

共享WIFI贴码怎么推广?快速地推技巧揭秘!

在如今高度互联网化的社会中&#xff0c;共享WIFI已经成为人们生活中不可或缺的一部分。然而&#xff0c;创业者想要让自己代理加盟的共享WIFI贴码&#xff0c;获得更多用户和增加收益&#xff0c;就需要进行有效的推广。那么&#xff0c;共享WIFI贴码该如何推广呢&#xff1f;…