初阶数据结构--树

1. 树的概念与结构

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

  • 有⼀个特殊的结点,称为根结点,根结点没有前驱结点。

  • 除根结点外,其余结点被分成 M(M>0) 个互不相交的集合 T1、T2、……、Tm ,其中每⼀个集合Ti(1 <= i <= m) ⼜是⼀棵结构与树类似的⼦树。每棵⼦树的根结点有且只有⼀个前驱,可以 有 0 个或多个后继。因此,树是递归定义的。
    在这里插入图片描述

注意:

  • 树形结构中,⼦树之间不能有交集,否则就不是树形结构。(如果存在相交就是图了)
  • 除了根结点外,每个结点有且仅有⼀个父节点
  • ⼀棵N个结点的树有N-1条边(箭头)

2. 树的相关术语

在这里插入图片描述

父结点/双亲结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;如上图:A是B的父结点

子结点/孩子结点:一个结点含有的子树的根结点称为该结点的子结点;如上图:B是A的孩子结点

结点的度:一个结点有几个孩子,他的度就是多少;比如A的度为6,F的度为2,K的度为0

树的度:一棵树中,最大的结点的度称为树的度;如上图:树的度为 6

叶子结点/终端结点:度为 0 的结点称为叶结点;如上图:B、C、H、I… 等结点为叶结点

分支结点/非终端结点:度不为 0 的结点;
如上图:D、E、F、G… 等结点为分支结点

兄弟结点:具有相同父结点的结点互称为兄弟结点(亲兄弟);如上图:B、C 是兄弟结点

结点的层次:从根开始定义起,根为第 1 层,根的子结点为第 2 层,以此类推;

树的高度或深度:树中结点的最大层次;如上图:树的高度为 4

结点的祖先:从根到该结点所经分支上的所有结点;如上图:A 是所有结点的祖先

路径:一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列;比如A到Q的路径为:A-E-J-Q;H到Q的路径H-D-A-E-J-Q

子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙

森林:由 m(m>0) 棵互不相交的树的集合称为森林;

3. 树的表示

树结构相对于线性表就比较复杂了,要存储和表示起来就比较麻烦了,实际中树有很多种表示方法。如:双亲表示法、孩子表示法、孩子兄弟表示法等等。其中最常用的是孩子兄弟表示法
孩子兄弟表示法中,所定义的结点类型大致是这样的:

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

在这里插入图片描述

4. 树形结构实际运用场景

文件系统是计算机存储和管理文件的一种方式,它利用树形结构来组织和管理文件和文件夹。在文件系统中,树结构被广泛应用,它通过父结点和子结点之间的关关系来表示不同层级的文件和文件夹之间的关联。
在这里插入图片描述

5. 二叉树

5.1 二叉树的概念与结构

在树形结构中,最常⽤的就是⼆叉树,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。
在这里插入图片描述

从上图可以看出⼆叉树具备以下特点:

  1. ⼆叉树不存在度⼤于 2 的结点
  2. ⼆叉树的⼦树有左右之分,次序不能颠倒,因此⼆叉树是有序树

注意:对于任意的⼆叉树都是由以下⼏种情况复合⽽成的。

在这里插入图片描述

5.2 特殊的二叉树

5.2.1 满二叉树

⼀个⼆叉树,如果每⼀个层的结点数都达到最⼤值,则这个⼆叉树就是满⼆叉树。也就是说,如果⼀个⼆叉树的层数为 K ,且结点总数是 2 k − 1 2^k - 1 2k1 ,则它就是满⼆叉树。

在这里插入图片描述

5.2.2 完全二叉树

完全二叉树 是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。

对于深度为 K 的,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为 K 的满二叉树中编号从 1n 的结点一一对应时称之为完全二叉树。

要注意的是,满二叉树 是一种特殊的完全二叉树,完全二叉树是从左到右的。

在这里插入图片描述

5.2.3 二叉树的性质
  • 性质一:若规定根结点的层数为 1 1 1,则一棵非空二叉树的第i层上最多有 2 i − 1 2i-1 2i1个结点。
  • 性质二:若规定根结点的层数为 1 1 1,则深度为h的二叉树的最大结点数为 2 h − 1 2h-1 2h1个。
  • 性质三:对任何一棵二叉树,如果度为0的叶结点个数为 n 0 n0 n0,度为2的分支结点个数为 n 2 n2 n2,则有 n 0 = n 2 + 1 n0 = n2+1 n0=n2+1
  • 性质四:若规定根结点的层数为 1 1 1,则具有N个结点的满二叉树的深度 h = l o g 2 ( N + 1 ) h = log2(N+1) h=log2(N+1)
  • 性质五:若规定结点层数为 1 1 1,具有 n n n个结点的满二叉树的深度
  • 性质六:对于具有 N N N个结点的完全二叉树,如果按照从上至下、从左至右的数组顺序对所有结点从0开始编号,则对于序号为i的结点:
    • 若 i > 0,则该结点的父结点序号为:( i - 1) / 2;若 i = 0,则无父结点。
    • 若2i + 1 < N,则该结点的左孩子序号为:2i + 1;若2i + 1 >= N,则无左孩子。
    • 若2i + 2 < N,则该结点的右孩子序号为:2i + 2;若2i + 2 >= N,则无右孩子。

5.3 二叉树的存储结构

5.3.1 顺序结构

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

在这里插入图片描述

现实中通常把(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

5.3.2 链式结构

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即月用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链。后面学到高阶数据结构如红黑树等会用到三叉链。
在这里插入图片描述

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

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

相关文章

硬件工程师面试问题(五):蓝牙面试问题与详解

蓝牙技术作为物联网与智能设备的核心无线协议&#xff0c;其硬件设计能力直接影响产品连接稳定性、功耗及兼容性。面试是评估候选人射频电路设计、天线优化、协议栈调试等综合技能的关键环节&#xff0c;尤其在BLE低功耗设计、共存抗干扰等场景中&#xff0c;硬件工程师的实践经…

Redis-基本数据类型

Redis支持的基本数据类型&#xff1a;String、hash、list、Set、Zset 一、String 特点 可以存储三种类型 int、float、string 运用场景 缓存&#xff1a;存储HTML片段、用户会话&#xff08;Session&#xff09;计数器&#xff1a;网站访问量、点赞数&#xff08;incr方法&am…

Tomcat的部署

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和 并发访问用户不是很多的场合下被普遍使用&#xff0c;Tomcat 具有处理HTML页面的功能&#xff0c;它还是一个Servlet和 JSP容器 官网:Apache Tomcat - Welco…

Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题

当 Linux 系统的 TCP 连接数达到 2 万,且 /proc/net/sockstat 中的 tcp_tw(TIME_WAIT 连接)、tcp_alloc(已分配但未完全建立的连接)和 tcp_inuse(正在使用的连接)均处于高位时,可能会引发以下问题: 一、关键指标分析 通过 /proc/net/sockstat 可以查看 TCP 连接状态:…

服务器数据恢复—Raid6阵列硬盘故障掉线,上层虚拟机数据如何恢复?

服务器数据恢复环境&故障&#xff1a; 一台由16块硬盘组成的raid6磁盘阵列。磁盘阵列中有一块硬盘因为物理故障掉线&#xff0c;导致服务器上层虚拟机无法正常使用&#xff0c;部分分区丢失&#xff0c;重启物理服务器后发现数据丢失。 服务器数据恢复过程&#xff1a; 1、…

Unhandled exception: org.apache.poi.openxml4j.exceptions.InvalidFormatException

代码在main方法里面没有报错&#xff0c;在Controller里面就报错了。 原来Controller类里面少了行代码 import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 加上去就解决了。

RISC-V debug专栏2 --- Debug Module(DM)

Debug Module&#xff08;DM&#xff09;的核心功能 DM 就像一个翻译官&#xff0c;负责把调试器的抽象指令&#xff08;比如 “暂停处理器”&#xff09;转换成硬件能听懂的具体操作。它必须实现以下基本功能&#xff1a; 必要功能&#xff08;必须实现&#xff09;&#xff…

infinityfree最新免费建站详细教程_无需备案_5G空间_无限流量_免费域名_免费SSL

一、明确目标—是否要使用 1.为什么选择InfinityFree&#xff1f; 对于初学者、学生或只是想尝试网站搭建的个人用户来说&#xff0c;InfinityFree提供了一个绝佳的免费解决方案。这个国外免费的虚拟主机服务提供&#xff1a; 5GB存储空间 - 足以存放个人博客、作品集或小型…

我与数学建模之终章

自美赛失利之后&#xff0c;就开始忙活别的了&#xff0c;因为数学竞赛国赛当时还没收到通知&#xff0c;所以就在准备写论文&#xff0c;最后论文拿去交挑战杯竞赛了&#xff0c;拿了个校一省一国三。 在写论文过程中&#xff0c;通知去上海参加数学竞赛&#xff0c;其实当时…

大学生机器人比赛实战(三)经验篇

大学生机器人比赛一等奖实战指南&#xff1a;从组队到夺冠的全流程策略 参加大学生机器人比赛并斩获一等奖是许多理工科学子的梦想&#xff0c;这不仅是对技术能力的认可&#xff0c;更是未来深造和就业的重要加分项。本文将从团队组建、技术攻关、项目管理、比赛策略和心理建…

关于UDP端口扫描概述

尽管互联网上大多数流行服务都基于 TCP 协议运行&#xff0c;但 UDP 服务也广泛部署。DNS、SNMP 和 DHCP&#xff08;注册端口 53、161/162 和 67/68&#xff09;是最常见的服务之一。 由于 UDP 扫描通常比 TCP 扫描更慢、更困难&#xff0c;一些安全审计人员可能会忽略这些端…

美团滑块 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 距离识别不准简单学习一下&…

SpringBoot配置文件多环境开发

目录 一、设置临时属性的几种方法 1.启动jar包时&#xff0c;设置临时属性 ​2.idea配置临时属性 3.启动类中创建数组指定临时属性 二、多环境开发 1.包含模式 2.分组模式 三、配置文件的优先级 1.bootstrap 文件优先&#xff1a; 2.特定配置文件优先 3.文件夹位置优…

开发一个小程序需要多久时间?小程序软件开发周期

开发一个小程序所需时间受多种因素影响&#xff0c;以下为你详细列举&#xff1a; 一、需求复杂度。若只是简单展示类小程序&#xff0c;如企业宣传、产品介绍&#xff0c;功能单一&#xff0c;大概 1 - 2 周可完成。若涉及复杂交互&#xff0c;像电商小程序&#xff0c;涵盖商…

Linux 基础入门指南:用户管理、基本命令(一)

摘要&#xff1a;Xshell登录、用户管理、修改字体与配色方案。操作系统概要。Linux文件系统基础。相关命令&#xff1a;pwd, ls, cd, mkdir, rmdir, rm,touch, nano, tree; adduser, passwd 目录 一、系统登录与用户管理 1. 登录方式 &#xff08;1&#xff09;命令行登录 …

【python】:使用Qt Creator 管理python项目

一、引言&#xff08;也许适合小众的你&#xff09; 如果你跟我一样&#xff0c;有时候开发点小项目&#xff0c;既有Qt的需求&#xff0c;又有python项目需求,除了VS以外&#xff0c;Qt Creator同时满足这两种语言的项目开发需求和无缝项目切换&#xff0c;目前来看确实是比较…

【简单数论】(模运算,快速幂,乘法逆元,同余,exgcd,gcd,欧拉函数,质数,欧拉筛,埃式筛,调和级数枚举,约数,组合数)

数论 模运算 a m o d b a − ⌊ a / b ⌋ b a\ mod \ b a - \lfloor a / b \rfloor \times b a mod ba−⌊a/b⌋b n m o d p n \ mod\ p n mod p得到的结果的正负至于被除数 n n n有关 模运算的性质&#xff1a; ( a b ) m o d m ( ( a m o d m ) ( b m o d m ) ) m …

006贪心——算法备赛

跨步问题 跳跃游戏|| 问题描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j &…

MySQL学习笔记(三)——图形化界面工具DataGrip

目录 1. 图形化界面工具 2.下载 3. 安装 3.1 安装步骤 3.2 激活说明 4. 使用 4.1 汉化教程 4.2 使用 1. 图形化界面工具 上述&#xff0c;我们已经讲解了通过 DDL 语句&#xff0c;如何操作数据库、操作表、操作表中的字段&#xff0c;而通过 DDL 语句执行在命令进行操…

编程题学习

acwing 826. 单链表 #include <iostream>using namespace std;const int N 100010;int idx, e[N], ne[N], head;void init() {head -1;idx 0; }void insert_head(int x) {e[idx] x;ne[idx] head;head idx ; }void delete_k_pos(int x, int k) {e[idx] x;ne[idx…