数据结构的概念大合集06(树和二叉树)

概念大合集06

  • 1、树
    • 1.1 树的相关定义
    • 1.2 树的基本运算
    • 1.3 树的基本术语
      • 1.3.1 结点的度,树的度
      • 1.3.2 分支结点,叶子节点
      • 1.3.3 路径,路径长度
      • 1.3.4 孩子结点,双亲结点,兄弟结点
      • 1.3.5 结点层次,树的高度
      • 1.3.6 有序树,无序树
      • 1.3.7 森林
    • 1.4 树的性质
  • 2、二叉树
    • 2.1 二叉树的相关概念
      • 2.1.1 二叉树的相关定义
      • 2.1.2 二叉树的表现形式
      • 2.1.3 满二叉树
      • 2.1.4 完全二叉树
      • 2.1.5 完全二叉树与满二叉树比较
    • 2.2 二叉树的性质
    • 2.3 二叉树的构造
      • 2.3.1 先序序列
      • 2.3.2 中序序列
      • 2.3.3 后序序列
      • 2.3.4 由遍历序列构造二叉树

阅读指南:
在本文中,我们将重点探讨概念性的内容,旨在为您提供更为流畅和易于理解的阅读体验。关于树和二叉树的算法实现部分,作者已经安排在另一篇文章中进行详细阐述。
本篇文章的相关算法
数据结构大合集06——树与二叉树的相关函数运算算法

1、树

1.1 树的相关定义

树:有n个结点(元素)组成的有限集合(记为T);

空树:当n = 0时;

根结点:n > 0,这n个结点中有且仅有一个结点作为树的根节点,简称为“根”;

子树:除根节点外的m个不相交的有限集,其中每个子集本身又是一颗符合本定义的树,称为根节点的子树;

1.2 树的基本运算

函数名函数作用
InitTree(&t)初识化树,构造一个空树t
DestroyTree(&t)销毁树,释放为树t分配的内存空间
TreeHeight (t)求树t的高度
Parent(t , p)求树t中p所指节点的双亲结点
Brother(t , p)求树t中p所指节点的所有兄弟节点
Sonts(t , p)求树t中p所指节点的所有子孙节点

1.3 树的基本术语

1.3.1 结点的度,树的度

  • 结点的度:树中某个结点的子树的个数
  • 树的度:所有结点的度中最大值

1.3.2 分支结点,叶子节点

  • 分支结点:度不为0的结点非根结点
  • 叶子结点:度为0的结点
    请添加图片描述

1.3.3 路径,路径长度

  • 路径:对于树中任一两个结点ki和Kj,若速中存在一个结点序列,除kj外的任一结点都是起其在序列中的前一个结点的后继结点,则这段序列成为ki到Kj的一条路径
  • 路径长度:路径序列的结数目减1

1.3.4 孩子结点,双亲结点,兄弟结点

  • 孩子结点:每个结点的后继结点
  • 双亲结点:孩子结点的前向节点
  • 兄弟结点:具有同一双亲结点的孩子结点互称为兄弟结点
    请添加图片描述

1.3.5 结点层次,树的高度

  • 结点层次(结点深度):从根结点开始数起,即根结点为1,依次排列
  • 树的高度(树的深度):树中结点的最大层次

请添加图片描述

1.3.6 有序树,无序树

  • 有序树:树中各结点的子树是按照一定的次序从左向右排列的,且相对次序不能随意更换(一般都是有序树)
  • 无序树:与有序树相反

1.3.7 森林

  • 森林:m棵树互不相交的数的集合,好比一个根结点有多个子树,这时候把根结点删除,于是多个子树就组成了森林

1.4 树的性质

  1. 树中的结点(元素)数等于所有结点的度数之和加1。
  2. 度为m的数找那个第i层上最多有mi-1个结点( i > 0 )。

       推广:当一个m次树的第i层有mi-1个结点时,则层该层是满的,若每一层都是满的,则称该树为满m次树。

  1. 高度为h的m次树最多有 (mk - 1) / (m - 1)个结点。
  2. 具有n个结点的m次树的最小高度为logm(n * (m - 1) + 1)。

注:
具体的推到过程,读者们可以自己尝试尝试,这里就不在过多推导了。

2、二叉树

2.1 二叉树的相关概念

2.1.1 二叉树的相关定义

二叉树:一个有限的结点集合,这个结点或者为空,或者有一个根节点和两颗互不相交的称为左子树与右子树的二叉树组成。

层序编号:约定编号从树根为1开始,按照层数从小到大,同一层从左到右的次序进行。

树中所有的基本术语在二叉树里面都适用。

注:
任何m次树都可以转化为二叉树结构;

2.1.2 二叉树的表现形式

  1. 空二叉树
    请添加图片描述

  2. 单个结点的二叉树
    请添加图片描述

  3. 右子树为空的二叉树
    请添加图片描述

  4. 左子树为空的二叉树
    请添加图片描述

  5. 左右子树都不为空的二叉树
    请添加图片描述

2.1.3 满二叉树

满二叉树:所有分支结点都有左右孩子结点,并且叶子结点都集中在二叉树的最下一层

请添加图片描述

满二叉树在一些特定的数据存储和检索算法中有用,但相对较少见。

满二叉树(非空)的特点:

  • 叶子结点都在最下一层
  • 只有度为0和度为2的结点

2.1.4 完全二叉树

完全二叉树:二叉树中最多只有最下面两层的结点的度数可以小于2,并且最下面一层的叶子结点依次排列在该层的最左边的位置上

请添加图片描述

完全二叉树在堆数据结构中广泛应用,如二叉最小堆和二叉最大堆。

完全二叉树(非空)的特点:

  • 叶子节点只可能在最下面两层中出现
  • 对于最大层次中的叶子结点,都依次排列在该层最左边的位置上
  • 如果有度为1的结点,只看有一个,且该结点只有左孩子而无右孩子
  • 在按层序编号是,一旦出现编号为i的结点是叶子结点或只有左孩子,则编号大于i的结点均为叶子结点。
  • 当结点总数n为奇数时,n1 = 0;当n为偶数时, n1 = 1。

2.1.5 完全二叉树与满二叉树比较

由满二叉树与完全二叉树的表示图可以看出:

满二叉树的成立条件:
每个节点都有两个子节点(除非是叶子节点),并且所有叶子节点都在同一层级

完全二叉树的成立条件:
每一层都是满的,或者除了最后一层外其他层都是满的,且最后一层的节点尽可能地靠左排列。

当满二叉树的高度与完全二叉树相同时,满二叉树是完全二叉树的一种特殊体现,并且完全二叉树与同高度的满二叉树的对应位置结点的编号相同。

2.2 二叉树的性质

  1. 非空二叉树上的叶子结点树等于双分子结点数加1。
  2. 在二叉树的第i层上至多有2i-1个结点( i >= 1 )。
  3. 深度为h的二叉树至多有2h-1个结点( k >= 1 )。
  4. 具有n个节点的完全二叉树深为( log2(n + 1) )。

2.3 二叉树的构造

2.3.1 先序序列

沿着二叉树外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果
请添加图片描述

先序遍历结果为:A B D E C F G

2.3.2 中序序列

中序遍历可以看成,二叉树每个节点,垂直方向投影下来(可以理解为每个节点从最左边开始垂直掉到地上),然后从左往右数,得出的结果便是中序遍历的结果

请添加图片描述

中遍历结果为:D B E A F C G

2.3.3 后序序列

后序遍历就像是剪葡萄,我们要把一串葡萄剪成一颗一颗的。

围着树的外围绕一圈,如果发现一剪刀就能剪下的葡萄(必须是一颗葡萄)(也就是葡萄要一个一个掉下来,不能一口气掉超过1个这样),就把它剪下来,组成的就是后序遍历了。

后序遍历中,根节点默认最后面

请添加图片描述

后序遍历结果:H I D J E B K F G C A

2.3.4 由遍历序列构造二叉树

请添加图片描述

本篇文章的相关算法
数据结构大合集06——树与二叉树的相关函数运算算法

上一篇文章
数据结构的概念大合集05(串)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sentinel中StatisticSlot数据采集的原理

StatisticSlot数据采集的原理 时间窗口 固定窗口 在固定的时间窗口内,可以允许固定数量的请求进入;超过数量就拒绝或者排队,等下一个时间段进入, 如下图 时间窗长度划分为1秒 单个时间窗的请求阈值为3 上述存在一个问题, 假如9:18:04:…

C语言 数组指针 指针数组

指针数组 什么是指针数组&#xff0c;他是一个数组&#xff0c;数组的元素是指针。但是指针也有多种数据类型&#xff0c;有数组指针、函数指针、整形指针、字符串指针。 现在我就使用函数指针来写代码&#xff0c;也就是函数指针数组的应用代码&#xff1a; #include <s…

基于SpringBoot和Vue的课程作业管理系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的课程作业管理系统的设计与实现。 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&am…

权限提升-Windows权限提升篇数据库篇MYSQLMSSQLORACLE自动化项目

知识点 1、Web到Win-数据库提权-MSSQL 2、Web到Win-数据库提权-MYSQL 3、Web到Win-数据库提权-Oracle 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学习权限提升转移技术&#xff1…

ST表和并查集【2024蓝桥杯0基础】-学习笔记

文章目录 ST表-用于优化RMQ问题状态分析例题分析代码复现 并查集例题分析1代码复现 例题分析2状态分析代码复现 合并并查集的方法启发式合并&#xff1a;按照子树的节点大小按秩合并&#xff1a;按照子树的深度 可撤销并查集带权并查集代码复现 例题分析思路分析 感悟 ST表-用于…

android emulator windows bat启动

android emulator windows bat启动 先上结果 // 模拟器路径 -netspeed full -avd 模拟器名称 C:\Users\name\AppData\Local\Android\Sdk\emulator\emulator.exe -netdelay none -netspeed full -avd Pixel_3a_API_34_extension_level_7_x86_64一般来说 windows 如果不做…

小游戏-扫雷

扫雷大多人都不陌生&#xff0c;是一个益智类的小游戏&#xff0c;那么我们能否用c语言来编写呢&#xff0c; 我们先来分析一下扫雷的运行逻辑&#xff0c; 首先&#xff0c;用户在进来时需要我们给与一个菜单&#xff0c;以供用户选择&#xff0c; 然后我们来完善一下&#…

Mac电脑高清媒体播放器:Movist Pro for mac下载

Movist Pro for mac是一款专为Mac操作系统设计的高清媒体播放器&#xff0c;支持多种常见的媒体格式&#xff0c;包括MKV、AVI、MP4等&#xff0c;能够流畅播放高清视频和音频文件。Movist Pro具有强大的解码能力和优化的渲染引擎&#xff0c;让您享受到更清晰、更流畅的观影体…

疫情居家办公OA系统设计与实现| Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;…

Netty剖析 - Why Netty

文章目录 Why NettyI/O 请求的两个阶段I/O 模型Netty 如何实现自己的 I/O 模型线程模型 - 事件分发器&#xff08;Event Dispather&#xff09;弥补 Java NIO 的缺陷更低的资源消耗网络框架的选型Netty 发展现状Netty 的使用 Why Netty I/O 模型、线程模型和事件处理机制优化&a…

Spring Cloud四:微服务治理与安全

Spring Cloud一&#xff1a;Spring Cloud 简介 Spring Cloud二&#xff1a;核心组件解析 Spring Cloud三&#xff1a;API网关深入探索与实战应用 文章目录 一、服务注册中心的选型与最佳实践1. 主流服务注册中心概述2. 最佳实践建议(1)、选型建议(2)、高可用性与稳定性1). 高可…

游戏引擎中的地形系统

一、地形的几何 1.1 高度图 记录不同定点的高度&#xff0c;对每个网格/顶点应用高度、材质等信息&#xff0c;我们每个顶点可以根据高度改变位移 但是这种方法是不适用于开放世界的。很难直接画出几百万公里的场景 1.2 自适应网格细分 当fov越来越窄的时候&#xff0c;网格…

学习SpringBoot笔记--知识点(1)

目录 SpringBoot介绍 创建一个最基础的springbooot项目 使用Spring Initializr创建springboot项目 Spring Boot 自动配置机制 SpringBoot常用注解 1.组件注册 2.条件注解 3.属性绑定 SpringBoot自动配置流程​编辑 学习SpringBoot的方法 ​编辑 SpringBoot日志配置…

机器学习周记(第三十一周:文献阅读-GGNN)2024.3.18~2024.3.24

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文模型 1.2.1 数据处理 1.2.2 门控图神经网络 1.2.3 掩码操作 2 相关知识 2.1 图神经网络&#xff08;GNN&#xff09; 2.2 图卷积神经网络&#xff08;GCN&#xff09; 3 相关代码 摘要 本周阅读了一篇利用图神…

银行监管报送系统介绍(六):客户风险数据报送系统

【概念定义】 银监会决定从2013年起实行新版客户风险统计制度&#xff0c;对各政策性银行、国有商业银行、股份制商业银行进行客户信息汇总统计。 客户风险统计信息&#xff0c;是指新版客户风险统计报送信 息。客户风险统计报送信息包括但不限于对公及同业客户授信和 表内外业…

ClickHouse--11--物化视图

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.物化视图什么是物化视图? 1.1 普通视图1.2 物化视图1.3 优缺点1.4 基本语法1.5 在生产环境中创建物化视图1.6 AggregatingMergeTree 表引擎3.1 概念3.2 Aggregat…

【Linux】Linux工具学习之git

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言一、账号注册1.1 GitHub与Gitee 二、构建仓库三、安装git 四、配置git五、克…

树状数组原理和代码

树状数组 求下标的对应 求i管着的下标的范围 方法&#xff1a;拆掉最右侧的1然后1 到你自己 query sum 1-i的和 拆掉最右侧的1 再把下一个数值吸收到sum 重复这个过程直到全变0为止 add 方法&#xff1a;加上最右侧的1 到上限为止 lowbit方法 单点增加范围查询模板 #inc…

Redis持久化【RDB,bgsave的写时复制机制】【AOF,aof重写机制】【Redis混合持久化,以及对应改变aof重写规则】【Redis数据备份策略】

Redis持久化 RDB快照&#xff08;snapshot&#xff09;bgsave的写时复制(COW)机制 AOF&#xff08;append-only file&#xff09;AOF重写 Redis 4.0 混合持久化开启持久化后&#xff0c;AOF重写规则发生了变化 Redis数据备份策略&#xff1a; 转自 图灵课堂 RDB快照&#xff0…

第390场 LeetCode 周赛题解

A 每个字符最多出现两次的最长子字符串 滑动窗口&#xff1a;枚举窗口的左边界&#xff0c;尽可能右移窗口的右边界。 (当然也可以暴力枚举) class Solution { public:int maximumLengthSubstring(string s) {vector<int> cnt(26);int res 0;for (int l 0, r -1, n s…