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

news/2024/5/5 2:09:43/文章来源:https://blog.csdn.net/weixin_46629453/article/details/128879469

目录

一、树的基本概念

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.luyixian.cn/news_show_283734.aspx

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

相关文章

零基础教学必会篇(详解字符函数和字符串函数)(完结版)

各位csdn的友友们好&#xff0c;上次阿博给大家讲了一些简单的字符串函数的功能和模拟实现&#xff0c;今天就和阿博一起再上一个台阶继续拿捏它们&#x1f60a;&#x1f60a;&#x1f60a; 文章目录1.strstr的功能介绍2.strstr函数的模拟实现3.strtok的功能介绍4.strerror和pe…

零基础学习Java 06

目录 String String构造方法 字符串查找 字符串截取 字符串替换 字符串拆分 字符串修改 String String类在java.lang包下&#xff0c;所以使用的时候不需要导包。 String构造方法 字符串查找 char charAt(int index)&#xff0c;输入位置index&#xff0c;找单个字符 …

MAE论文笔记+Pytroch实现

Masked Autoencoders Are Scalable Vision Learners&#xff0c; 2021 近期在梳理Transformer在CV领域的相关论文&#xff0c;落脚点在于如何去使用Pytroch实现如ViT和MAE等。通过阅读源码&#xff0c;发现不少论文的源码都直接调用timm来实现ViT。故在此需要简单介绍一下timm…

Linux 中的 /dev/random 和 /dev/urandom 是什么?

在Linux系统中&#xff0c;/dev/random和/dev/urandom是两个特殊的设备文件&#xff0c;用于生成随机数。在本文中&#xff0c;我们将深入探讨这两个设备文件的区别&#xff0c;以及它们在Linux系统中的作用。 /dev/random /dev/random是一个随机数生成器设备文件&#xff0c;…

windows10下编译zlib库

系列文章目录 文章目录系列文章目录前言一、问题原因二、准备具体操作编译zlib工程前言 我使用CMake编译zlib源码&#xff0c;出现警告&#xff1a;CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be r…

五、基础初始化(init_sequence)

初始化序列数组 # < lib_arm\board.c > init_fnc_t *init_sequence[] { board_init, /* basic board dependent setup */ timer_init, /* initialize timer */ env_init, /* initialize environment */ init_baudrate, /* initialze baudrate settings */ serial_…

VUE3 学习笔记(七)动态样式 class 实现

目录 一、绑定 HTML class 1. 绑定对象 2. 绑定数组 3. 在组件上使用 二、绑定内联样式 1. 绑定对象 2. 绑定数组 3. 自动前缀 4. 样式多值 数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute&#xff0c;我们可…

一道小学题,解答了我与学霸的差距

目录一、背景二、题目三、过程1.形式转换2.个位数相加只能向前进一位嘛&#xff1f;进两位可以吗&#xff1f;进三位呢&#xff1f;3.十位数上要填写的内容&#xff0c;可以是0嘛&#xff1f;你想到了吗&#xff1f;4.如何下意识的去做结构化&#xff1f;四、总结五、升华一、背…

讲一下dns过程:给一个网址www.google.com,dns服务器如何逐级解析的?

DNS 中的域名都是用句点来分隔的&#xff0c;比如 www.server.com&#xff0c;这里的句点代表了不同层次之间的界限。在域名中&#xff0c;越靠右的位置表示其层级越高。域名最后还有一个点&#xff0c;比如 www.server.com.&#xff0c;这个最后的一个点代表根域名。 根DNS服…

UDP套接字

大家好,又见面了,&#x1f389;&#x1f389;&#x1f389;&#x1f338;&#x1f338;&#x1f338; 今天为大家带来UDP套接字的相关知识 文章目录认识socketUDP和TCP认识UDPAPI有关方法基于UDP实现回显服务器UDP的方法基于UDP实现回显程序认识socket UDP和TCP 认识UDPAPI有…

腾讯空降测试工程师,绩效次次拿S,真是砂纸擦屁股,给我露了一手啊

​上周我们公司的绩效面谈全部结束了&#xff0c;每年到这个时间点就是打绩效的时候了&#xff0c;对于职场打工人来说绩效绝对是最重要的事情之一&#xff0c;原因也很简单&#xff1a;奖金、晋升、涨薪都和它有关系。 比如下面这个美团员工在脉脉上的自曝就很凄凉&#xff1…

多种方法解决VS在创建多个源文件后运行时出现的重定义错误:main已经在1.obj中定义

名人说&#xff1a;博学之&#xff0c;审问之&#xff0c;慎思之&#xff0c;明辨之&#xff0c;笃行之。——《中庸》 创作者&#xff1a;Code_流苏(CSDN) 本篇文章收录于&#xff1a;各类问题记录专栏 记录一、原因经过二、解决方法1️⃣方法一 注释2️⃣方法二 生成排除3️⃣…

学习Python的一些知识点记录

一、对象比较 Python中有两种对象比较方式&#xff1a; 值比较。使用比较符号&#xff08;、>、<等&#xff09;标识符比较。使用 is、not 关键字。标识符就是对象在内存中的有效地址&#xff0c;使用 id() 函数可以得到对象的标识符。二、None 对象 这是一个特殊对象…

【Python】数学 - 用 Python 自动化求解函数 f(x) 的值

目录 1、缘起 2、求以下函数的值 3、代码清单 3.1、求解 f(0)、f(1)、 f(​编辑)、f(​编辑) 3.2、求解 g(0)、g(1)、g(​编辑)、g(​编辑) 3.3、求解 h(0)、h(1)、h(​编辑)、h(​编辑) 4、总结 1、缘起 Python 是一种强大的编程语言&#xff0c;它具有广泛的应用领域。…

四、第二阶段

全局数据 声明 # < lib_arm\board.c > DECLARE_GLOBAL_DATA_PTR; 定义 # < include\asm\global_data.h > typedef struct global_data { bd_t *bd; unsigned long flags; unsigned long baudrate; unsigned long have_console; /* serial_init() was calle…

使用adb 命令删除手机预装app

1. 手机开启开发者选项&#xff0c;允许usb调试&#xff1b; 2.pc 安装adb&#xff0c; 1&#xff09;Windows版本&#xff1a;https://dl.google.com/android/repository/platform-tools-latest-windows.zip 2&#xff09;按键windowsr打开运行&#xff0c;输入sysdm.cpl&a…

Go 语言安装部署,两分钟让你写`上Hello World`(包含 goland 开发工具)

Go 语言安装部署&#xff0c;两分钟让你写上Hello World&#xff08;包含 goland 开发工具&#xff09; 第一步下载 Go 安装包 官网 https://golang.google.cn/dl/ 根据自己使用电脑平台选择安装版本 第二步 安装 GO 打开安装包直接点击next下一步 勾选协议&#xff0c;继…

10 kafka生产者发送消息的原理

1.发送原理&#xff1a; 在消息发送的过程中&#xff0c;涉及到了两个线程——main 线程和 Sender 线程。在 main 线程 中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator&#xff0c; Sender 线程不断从 RecordAccumulator 中拉取消息发送到…

CTFHub | 00截断

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

IDEA修改主题 设置背景图片

IDEA修改主题 设置背景图片 目录IDEA修改主题 设置背景图片1.修改IDEA默认主题2.修改IDEA背景图片2.1 打开设置界面2.2 下载插件很多小白在刚刚使用IDEA的时候还不是很熟练本文主要给大家提供一些使用的小技巧&#xff0c;希望能帮助到你1.修改IDEA默认主题 IDEA的默认主题是黑…