【DAY06 软考中级备考笔记】数据结构:树

数据结构:树 3月1日 – 天气:晴

之前在B站看的视频讲的是在太过简单,弃了。现在换了新的视频继续,后续会重新看前面的视频补过来。https://www.bilibili.com/video/BV1pT4m1S7uH/

1. 树的基本概念

image-20240301211140757

需要注意的是:

  • 并不是在同一层上的所有节点都互为兄弟节点。而是具有相同双亲的节点成为兄弟节点
  • 注意有序树和无序树的概念,并且二叉树是有序树

2. 二叉树

2.1 二叉树的定义

在这里插入图片描述

在这里插入图片描述

二叉树是有序树!

2.2 二叉树的性质

image-20240301211551792

关于第三条性质的证明:

首先需要知道一个概念:对于任意一个树,满足“节点个数=分支数量+1”。其中分支数量就是上图红色部分的横线。

因此对于二叉树:

  • 假设度为0的节点为n0,度为1的节点为n1,度为0的节点为n1
  • 那么节点个数=n0+n1+n2
  • 分支个数为=n0×0+n1×1+n2×2
  • 根据上述公式可以得出:n0+n1+n2=0×0+n1×1+n2×2+1
  • 化简后得到n0=n2+1

关于上述性质,有一个例题:

在这里插入图片描述

2.3 二叉树的存储结构

image-20240301212058028

对于完全二叉树和满二叉树,这种方式比较合适,可以根据之前二叉树性质的公式直接计算出某一个节点的孩子节点的存储地址,进而可以直接访问。

但是对于普通的二叉树来说,会浪费大量的存储空间

image-20240301212218450

针对二叉树的链式存储,每一个节点都有两个指针域,但是实际上这些空间并不会完全利用,实际利用到的指针域数量为:

  • 假设二叉树中有n个节点,那么所有的指针域总数为2n
  • 根据分支总数+1=节点个数公式,可以得到分支总是为分支总数=节点个数-1,并且分支个数=利用的指针域个数
  • 所以实际使用的指针域个数为n-1
  • 则没有使用的指针域个数为2n-(n-1)=n+1

因此为了充分利用空闲指针域,提出了线索二叉树,结构如下:

image-20240301212910872

2.4 二叉树的遍历方式

image-20240301212258364

2.5 最优二叉树

image-20240301213157225

如何构建哈夫曼树

image-20240301213232696

image-20240301213251008

image-20240301213324709

image-20240301213541513

image-20240301213559840

image-20240301213615836

需要注意的是,哈夫曼树只有度为0和度为2的节点。

因为我们构建哈夫曼的操作都是两个节点构成一个新节点,所以不可能存在度为1的节点。

image-20240301213846480

3. 树和森林

image-20240301213834821

这里需要注意如何将树,森林和二叉树之间的转换

image-20240301213935764

image-20240301213948417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值