【数据结构】树与二叉树的基本概念及性质

目录

一、树的基本概念

1️⃣树的定义

2️⃣基本术语

3️⃣树的性质

二、二叉树的概念

1️⃣二叉树的定义

2️⃣特殊二叉树

3️⃣二叉树的性质

参考资料


一、树的基本概念

1️⃣树的定义

  1.  数据结构中的树是什么❓     
    1. 树是 n(n\geqslant 0) 个结点的有限集。
    2. 有且仅有一个特定的称为(上图A结点)的结点。
    3. 当 n>1 时,其余结点可分为 m(m>0) 个不相交的有限集  T_1,T_2,...,T_m,其中每个集合本身又是一棵树,并且称为根的子树。 
  2. 💡空树:n=0
  3. 树有哪些特点❓
    1. 树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。
    2. 树中所有结点都可以有零个或多个后继。

 2️⃣基本术语

  • 结点类术语
名称含义图示例子
祖先结点从根到该节点所经分支上的所有结点,包含父节点。

J的祖先结点:A、B、E
子孙结点一个结点的直接后继和间接后继,包含子节点。

B的子孙结点:E、F、J、K
双亲结点一个结点的直接前驱结点,又称父结点

E的父结点:B
孩子结点一个结点的直接后继结点D的孩子结点:H、I
兄弟结点同一双亲结点的孩子结点之间互称兄弟结点

J的兄弟结点:K
堂兄弟结点父结点是兄弟关系或堂兄关系的结点F的堂兄弟结点:G、H、I
叶子结点度为0,无后继结点,也称终端结点

叶子结点:橙色
分支结点度不为0,有后继结点,也称非终端结点分支结点:蓝色
  • 其他
名称含义图示例子
结点的度树中一个结点的孩子个数(树杈的数量)A的度=3,B的度=2
树的度树中结点的最大度数树的度=3
深度从根结点开始自顶向下逐层累加深度:4
高度从叶结点开始子底向上逐层累加高度:4
层次从根结点开始定义,根结点的层次=1。
路径两个结点连成的边
路径长度路径上所经的边的个数

3️⃣树的性质

度为m的树(以度为3的树为例)m叉树(以3叉树为例)
结点数 = 总度数 + 1(总度数:第2层到最后一层的结点;加1:根结点)
各结点的度的最大值每个结点最多只能有m个孩子
任意结点的度 \leqslant m
至少有一个结点度 =m允许所有结点的度都 <m
一定是非空树,至少m+1个结点可以是空树
第 i 层至多有 m^{i-1}  个结点  (i\geqslant 1)

         高度为h 、度为m的树至少有 h+m-1 个结点  

高度为 h 的 m叉树至少有 h 个结点   

                                                                       高度为 h 的 树至多有 \frac{m^h-1}{m-1} 个结点 

n个结点的树的最小高度为 log_m(n(m-1)+1)  

 💤思考一:为什么度为m的树、m叉树第 i 层至多有 m^{i-1}  个结点  (i\geqslant 1)

以3叉树为例,假如为满三叉树,如下图:

第一层:1个结点,m^0(m的0次幂)
第二程:3个结点,m^1
第三层:9个结点,m^2
...
第i层:m^{i-1}个结点(m的n-1次幂)

  💤思考二:为什么  高度为h,度为 m 的树至少有 h+m-1 个结点,而 m 叉树至少有 h 个结点❓

以高度为3,度为3的树、3叉树为例

我们首先复习一下什么是度为m的树,什么是m叉树

  1. 度为m的树:各结点的度的最大值。————等价于只要有一个结点的度 = 3 ,其余的度都最小 = 1
  2. m叉树:每个结点最多只能有m个孩子,允许所有结点的度都< m。————等价于将每个结点都设成最小 = 1

根据上述分析得到下图: 

度为3的树:5 ————> h+m-1
3叉树    :3 ————> h

  💤思考三:为什么高度为 h 为m的树、m叉树至多有 \frac{m^h-1}{m-1} 个结点 ❓

  •  高度为 3 为3的树、3叉树最多有多少个结点

        由上图知,共有结点数: 3^0+3^1+3^2=1+3+9=13

  • 高度为 h 为m的树、m叉树最多有多少个结点:m^0+m^1+m^2+...+m^{h-1}=\frac{1*(1-m^h)}{1-m}=\frac{1-m^{h}}{1-m}=\frac{m^h-1}{m-1}(等比公式求和)

 💤思考四:为什么n个结点的树的最小高度为 log_m(n(m-1)+1)

二、二叉树的概念

1️⃣二叉树的定义

  1. 二叉树:每个结点至多只有两颗子树,且有左右之分,其次序不能颠倒。

  2. 空二叉树:n=0

  3. 二叉树的5种形态

    因为二叉树具有左右之分、且允许所有结点的度<2,所以二叉树具有多种形态。

    空二叉树只有根结点只有左子树只有右子树左右子树都有

2️⃣特殊二叉树

  1. 满二叉树       
    1. 概念:一棵树高为 h,且含有2^h-1个结点的二叉树(每层树都含有最多的结点)
    2. 图示:

    3. 特点:
      1. 从根结点(根编号为1),自上而下,自左向右,依次编号。
      2. 对于编号为 i 的结点,若有双亲,则双亲为 \large {\color{Magenta} \frac{i}{2}} ;若有左孩子,则左孩子为\large {\color{Magenta} 2i};若有右孩子,则右孩子为\large {\color{Magenta} 2i+1}。 
  2. 完全二叉树
    1. 概念:高度为h、有n个结点的二又树,当且仅当其每个结点都与高度为 h 的满二又树中编号为 1~n 的结点一一对应时,称为完全二又树。
    2. 图示:

    3. 特点:
      1. 若 \large i\leq \frac{n}{2} ,则结点 i 为分支结点,否则为叶子结点。
      2. 叶子结点只可能在层次最大的两层上出现。对于最大层出现的叶子结点,都依次排列在该层的最左边。
      3. 若有度为1 的结点,则该结点只能有左孩子,无右孩子。
      4. 按层编号后,若某结点只有左结点或为叶子结点,则编号大于该结点的均为叶子结点。
      5. 若 n 为奇数,则每个分支结点都有左右孩子;若 n 为偶数,则编号最大的分支结点 \large \frac{n}{2} ,只有左孩子,没有右孩子,其余分支结点都有左右孩子。
  3. 二叉排序树:左子树上所有结点的关键字均小于根结点的关键字:右子树上的所有结点的关键字均大于根结点的关键字:左子树和右子树又各是一棵二又排序树。
  4. 平衡二叉树:树上任意一个结点的左子树和右子树的深度之差不超过1。

3️⃣二叉树的性质

🍀性质一:非空二又树上的叶结点数等于度为2的结点数加1,即\large n_0=n_2+1

🍀性质二:非空二叉树上第 k 层上至多有\large 2^{k-1}个结点 \large (k\geq 1)

m叉树的具体化性质

🍀性质三:高度为 h 的二叉树至多有\large 2^{h}-1个结点\large (h\geq 1)

m叉树的具体化性质

🍀性质四:对完全二又树按从上到下、从左到右的顺序依次编号1,2,…,n,则有以下关系;

        ①当\large i>1时,结点 i 的双亲的编号为\large \frac{i}{2},即当 i 为偶数时,其双亲的编号为 \large \frac{i}{2} ,它是双亲的左孩子;当 i 为奇数时,其双亲的编号为\large \frac{i-1}{2},它是双亲的右孩子。
        ②当        \large 2i\leqslant n时,结点 i 的左孩子编号为\large 2i,       否则无左孩子。
        ③当\large 2i+1\leqslant n时,结点 i 的右孩子编号为\large 2i+1,否则无右孩子。
        ④结点 i 所在层次(深度)为\large log_2i+1

🍀性质五:具有n个(n>0)结点的完全二叉树的高度为\large log_2(n+1)\large log_2n+1

参考资料

《王道:23数据结构考研复习指导》

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

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

相关文章

C++ [内存管理]

本文已收录至《C语言》专栏&#xff01; 作者&#xff1a;ARMCSKGT 目录 前言 正文 计算机中内存分布 C语言的内存管理 内存申请函数 内存释放函数 C内存管理 new操作符 delete操作符 特性总结 注意 原理探究 operator new和operator delete函数 operator new的底…

【C++】STL之string的使用和模拟实现

初阶的C语法和基本的类和对象我们已经学过了&#xff0c;下面我们会步入一段新的旅程。本章我们将初步了解STL(标准模板库)&#xff0c;并且深入探讨其中一个非常重要的容器———string。 目录 &#xff08;一&#xff09;STL简介&#xff08;了解即可&#xff09; &#xf…

Hashtable、HashMap、ConcurrentHashMap的区别

作者&#xff1a;爱塔居 专栏&#xff1a;JavaEE 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起进步。 Hashtable和HashMap、ConcurrentHashMap 之间的区别? HashMap:线程不安全&#xff0c;key允许为null Hashtable:线程安全&#xff0c;使用synchronized锁Hashta…

2.4 特征工程

2.4 特征工程 李沐 B站:https://space.bilibili.com/1567748478/channel/collectiondetail?sid=28144 课程主页:https://c.d2l.ai/stanford-cs329p/ 1. 为什么需要特征工程: 特征工程 数据集进行特征提取,以使机器学习模型在对经过特征工程处理过的数据进行学习时可以更快…

(02)基础强化:面向对象,变量作用域,封装,继承,虚方法,可访问性

一、面向对象概念复习 1、什么是面向对象&#xff1f;OOP&#xff08;Object-Oriented Programming&#xff09; 一种分析问题的方式&#xff0c;增强了程序的可扩展性。 OOP面向对象编程 OOA面向对象分析 OOAD面向对象分析与设计&#xff08;…

Redis管道(pipeline)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1、管道(pipeline)的基本概念2、管道实操3、小总结前言 在正式讲解Redis管道之前&#xff0c;先引入一个面试题&#xff1a; 如何优化频繁命令往返造成的性能瓶…

【Hello Linux】线程控制

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;简单介绍linux中的线程控制 线程控制线程创建线程等待线程终止线程分离线程id和进程地址空间布局线程创建 我们可以通过下面pthread_c…

蓝桥杯基础14:BASIC-1试题 闰年判断

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定一个年份&#xff0c;判断这一年是不是闰年。 当以下情况之一满足时&#xff0c;这一年是闰年&#xff1a; 1. 年份…

Java面向对象 - 封装、继承和多态的综合练习(答案+知识点总结)第1关:封装、继承和多态进阶(一)+ 第2关:封装、继承和多态进阶(二)

目录 第1关&#xff1a;封装、继承和多态进阶&#xff08;一&#xff09; 报错总结 & 注意事项&#xff1a; 第2关&#xff1a;封装、继承和多态进阶&#xff08;二&#xff09; 源码&#xff1a; 报错总结 & 注意事项&#xff1a; 思维导图免费制作网站&#xf…

软考软件设计师下午试题一

数据流图基本图形元素 外部实体 外部系统是当前系统之外的系统 数据存储 在里面存储数据后还能取出来用 跟实体没有关系&#xff0c;他负责存储加工的数据或者提供数据给加工 加工 灰洞的解释比如输入需要两个才能得到输出的&#xff0c;但是他只输入了一个就是灰洞 数…

Matlab傅里叶级数展开(附结果图)

Matlab傅里叶级数展开&#xff08;附结果图&#xff09; 代码下载链接 代码下载链接 代码下载链接 如下图所示&#xff1a;

“唯一靶点”的华堂宁会成控糖爆品吗?

一上市&#xff0c;两次“断货”的货华堂宁有爆品那味儿了。 2022年10月28日华领医药-B&#xff08;02552.HK&#xff09;公告华堂宁&#xff08;多格列艾汀&#xff09;正式进入商业化&#xff0c;一周后各个渠道便进入到了断货和限售的状态。 对于一个不在传统九大降糖药品…

元宇宙与网络安全

元宇宙是一种虚拟现实空间&#xff0c;用户可以在计算机生成的环境中进行互动。元宇宙的应用范围很广&#xff0c;比如房地产&#xff0c;医疗&#xff0c;教育&#xff0c;军事&#xff0c;游戏等等。它提供了更具沉浸感的体验&#xff0c;更好地现实生活整合&#xff0c;以及…

组件、套件、 中间件、插件

组件、套件、 中间件、插件 组件 位于框架最底层&#xff0c;是由重复的代码提取出来合并而成。组件的本质&#xff0c;是一件产品&#xff0c;独立性很强&#xff0c;组件的核心&#xff0c;是复用&#xff0c;与其它功能又有强依赖关系。 模块 在中台产品和非中台产品中&…

C语言程序环境和预处理

文章目录程序的翻译环境和执行环境详解编译和链接翻译环境编译本身也分为几个阶段预处理编译汇编链接段表符号表的合并预处理详解预定义符号#define#define 定义标识符#define定义宏#define替换规则#和#### 的作用带副作用的宏参数宏和参数的对比宏和函数的一个对比命名约定#un…

FastestDet:比yolov-fastest更快!更强!全新设计的超实时Anchor-free目标检测算法

本篇文章转自于知乎——qiuqiuqiu,主要设计了一个新颖的轻量级网络! 代码地址:https://github.com/dog-qiuqiu/FastestDet 1 概述 FastestDet是设计用来接替yolo-fastest系列算法,相比于业界已有的轻量级目标检测算法如yolov5n, yolox-nano, nanoDet, pp-yolo-tiny, Fast…

CSS基础知识,必须掌握!!!

CSS基础知识Background&#xff08;背景&#xff09;CSS文本格式文本颜色文本对齐格式文本修饰文本缩进CSS中的字体字体样式字体大小CSS链接&#xff08;link&#xff09;CSS列表不同列表标项CSS列表项用图片作为标记CSS列表标记项位置CSS中表格&#xff08;table&#xff09;表…

Shell脚本之嵌套循环与中断跳出

1、双重循环 1.1 格式 #!/bin/bash for ((i9;i>1;i--)) do for ((j9;j>$i;j--)) do echo -n -e "$j$i$[$i*$j]\t" done echo done1.2 实例操作 2.1 格式 #!/bin/bash for ((a1;a<9;a)) dofor ((b9;b>a;b--))doecho -n " "donefor((c1;c<…

系统信息:uname,sysinfo,gethostname,sysconf

且欲近寻彭泽宰&#xff0c;陶然共醉菊花怀。 文章目录系统信息系统标识 unamesysinfo 函数gethostname 函数sysconf()函数系统信息 系统标识 uname 系统调用 uname()用于获取有关当前操作系统内核的名称和信息&#xff0c;函数原型如下所示&#xff08;可通过"man 2 un…

面向对象编程(基础)7:再谈方法(重载)

目录 7.1 方法的重载&#xff08;overload&#xff09; 7.1.1 概念及特点 7.1.2 示例 举例1&#xff1a; 举例2&#xff1a; 举例3&#xff1a;方法的重载和返回值类型无关 7.1.3 练习 **练习1&#xff1a;** 练习2&#xff1a;编写程序&#xff0c;定义三个重载方法并…
最新文章