数据结构---树、二叉树、哈夫曼树

树:是由N(N≥0)个节点构成的有限集合。其中,N = 0的树叫做空树

其余结点应满足以下来个条件:
(1)、有且只有一个特点的结点称之为
(2)、其余结点分成m(m≥0)个互不相交的有限集合,其中每一个集合,又都是一棵树
在这里插入图片描述

度:结点所拥有的子节点个数

在这里插入图片描述

叶子结点

叶子结点:度为0的结点,也叫终端结点

分支结点

分支结点:度不为0的结点,也叫非终端结点、非叶子结点、分支点或内结点。
在这里插入图片描述

有序树、无序树

如果一颗树的各子树,从左到右是有次序的,那么这棵树就是有序树;反之就是无序树。

在以下的俩颗树中,若是有序树,这俩颗树是不同的树;若各子树从左到右是无次序的,那么这俩颗树就表示同一颗树。
在这里插入图片描述

树结构和线性结构比较
树结构线性结构
根结点只有一个(无双亲)第一个数据元素(没有前驱)
叶子结点可以有多个(无孩子)最后一个数据元素(无后继)
非叶子结点,一个双亲多个孩子(一对多)其他数据元素一个前驱一个后继(一对一)
树的遍历

从根结点出发,按照某种次序,对树中所有结点进行访问,每个结点必须被访问且仅访问一次。

** 访问方式:**前序遍历、中序遍历、后序遍历
**遍历的实质:**j将二叉树的结点,按照一定的规则排列成一个线性序列,这实质上就是将一个非线性结构进行线性化操作。使得每个结点(除第一个和最后一个结点)都有且仅有一个前驱和一个后继。

前序遍历

先访问根结点,再访问左子树,最后访问右子树。
在这里插入图片描述
如图所示:前序遍历首先遍历到根节点,从根节点A开始,开始遍历A的左子树B,结点B继续遍历其左子树D,结点D因为没有孩子结点,返回空结点指针到B,开始遍历B的孩子结点E,再遍历结点E的左孩子H结点,因为H没有孩子结点,然后返回空结点指针到E,结点E继续遍历其右孩子I,因为结点I没有孩子结点,所以返回空结点指针到E,因为结点E的孩子结点都已经访问完毕,于是继续将空指针结点返回到B,结点B的孩子结点只有F没有被访问,于是访问结点F,因为F没有孩子结点,于是将空结点指针返回到A,根结点A开始访问其右孩子结点C,结点C访问其左孩子G,因为结点G没有孩子结点,于是将空结点指针返回。至此,所有结点都已经被访问完毕。
前序遍历结果:A B D E H I F C G

中序遍历

先访问左子树,再访问根节点,最后访问右子树
在这里插入图片描述
中序遍历结果:B D H E F A G C

后续遍历

先访问左子树,再访问右子树,最后访问根节点
在这里插入图片描述
后序遍历结果:D H I E F B G C A

层次遍历

二叉树的层次遍历:是指从二叉树的第一层(根结点)开始,从上到下逐层遍历,在同一层中从左到右访问。
在这里插入图片描述
层次遍历结果:A B C D F G E

二叉树

二叉树:二叉树不是一般树形结构的特殊形式。
二叉树的结点个数最多为2,而且严格区分左右孩子结点。

二叉树的形式

在这里插入图片描述

斜树

如图:像这样的二叉树,叫做斜树。
所有结点只有左子树的斜树,叫做左斜树
所有结点只有右子树的斜树,叫做右斜树
斜树的特点:
(1)、斜树的所有结点只有一个孩子
(2)、斜树的结点个数,也就是该二叉树的深度
在这里插入图片描述

完美二叉树

在一个二叉树中,所有终端结点位于同一层次,其他非终端结点度数为2,这样的二叉树叫做完美二叉树,或满二叉树。
完美二叉树特点:
(1)、叶子结点在最下一层
(2)、只有度为0和度为2的结点
在这里插入图片描述

完全二叉树

在一颗深度为K的n个结点的二叉树中,当且仅当该n个结点的二叉树与满二叉树中连续编号为i(1≦ i ≦ n)的结点位置一一对应,这样的二叉树叫做完全二叉树
在这里插入图片描述
第10号结点J刚好与满二叉树第10号结点J对应。
在这里插入图片描述
像下面这颗树,它就不是完全二叉树
在这里插入图片描述

完全二叉树特点

1、完全二叉树叶子结点只能出现在最下俩层,且最下一层叶子结点都集中在左面。

2、完全二叉树中,有且只有一个结点它的度为1,且它的孩子结点,只能是左孩子

3、在深度为k的完全二叉树中,k-1层一定是满二叉树。

4、在同样结点的二叉树中,完全二叉树的深度最小

二叉树的存储结构

线性表的顺序存储结构
将编号第一个置空,这样下标就与结点树相匹配
在这里插入图片描述

但是,有的时候,选择顺序存储会很浪费内存,比如:
在这里插入图片描述
此时,将顺序存储结构,换位链式存储结构,会更加方便。
链式存储特点:有三个域,一个数据域,俩个分别指向左右孩子的指针域。

线索二叉树

线索二叉树:是在一般二叉树的基础上,对每个结点进行考察。
(1)、若其左子树非空,则其左指针指向不变,仍指向其左孩子;若左子树为空,则左指针指向某种遍历顺序下的前驱
(2)、若其右子树非空,则其右指针指向不变,仍指向其右孩子;若右子树为空,则右指针指向某种遍历顺序下的后继

遍历顺序:
①、若规定遍历顺序为前序遍历,则称为前序线索二叉树
②、若规定遍历顺序为中序遍历,则称为中序线索二叉树
③、若规定遍历顺序为后序遍历,则称为后序线索二叉树

哈夫曼树

给定N个权值构造有N个叶子结点的二叉树,这样的二叉树获取可以构造多个,但这些二叉树中必有一个带权路径长度最小的一个,那么这个二叉树就是哈夫曼树最优二叉树

举个例子:
在这里插入图片描述

哈夫曼树特点

(1)、权值越大的结点,越靠近根结点;权值越小的结点,越远离根节点。
(2)、哈夫曼树中,只有度为0(叶子结点)的结点和度为2(分支结点)的结点,没有度为1的结点。
(3)、总结点个数为2n - 1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44585751

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值