树是n个结点的有限集,n=0时为空树,任意一个非空树有以下特征:
1.有且仅有一个根
2.n>1时,有m个互不相交的集合,每个集合本身时一棵树,称为根的子树
每一圈是一个结点。结点拥有的子树数是度,树的度取各结点度的最大值,如图

在这里插入图片描述
度为0 就是叶结点或者终端结点
度不为0 就是分支结点或者非终端结点,也是内部节点
树的深度depth为结点的最大层level

树的存储结构
双亲表示法
孩子表示法
双亲孩子表示法

二叉树
子树在2或者2以内就可以
左子树和右子树是有顺序的,不可以颠倒
在这里插入图片描述
二叉树的5种形态
在这里插入图片描述
特殊二叉树
斜树:一支流,往左或者往右斜
满二叉树:除了叶子结点以外,其他的结点都是满度,度数为2
叶子只能出现在最下一层。同样深度的二叉树,满二叉树的结点是最多的,叶子也是最多的
满二叉树vs完全二叉树
完全二叉树:叶子只能出现在最下两层,最下层的叶子一定集中在左部连续位置,能断开的只能是右边。如果结点度数为1,该结点只能由左孩子,这样序号才能连在一起
满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树

二叉树的存储结构
顺序:一维数组存储二叉树的各个结点,结点的存储位置能够体现结点之间的逻辑关系
完全二叉树的严格定义,数组可以直接表现出逻辑结构
在这里插入图片描述
一般二叉树,尽管层序编号不能反映逻辑关系,也可以在完全二叉树的编号方式上修改,不存在的结点用^代替
在这里插入图片描述
斜树,如果是右斜树
在这里插入图片描述
顺序的适用性不强,考虑链式存储,设计一个数据域和两个指针域在这里插入图片描述上图为二叉链表

二叉树的遍历
从根节点出发,安某种次序依次访问二叉树中所有结点,使每个结点被访问一次且只有一次。树的结点之间不存在唯一的前驱和后继这样的关系,在访问一个结点后,下一个结点面临不同的选择
如果限制从左到右的习惯方式,那么主要分为以下四种:
前序遍历:先访问根节点。然后前序遍历左子树,再前序遍历右子树
在这里插入图片描述
中序遍历:左子树,根节点,右子树。没有左子树就访问根结点
在这里插入图片描述
后序遍历
从左到右,先叶子后结点的顺序遍历访问左右子树,最后访问根。
在这里插入图片描述
层序遍历
从树的第一层,就是根节点开始,从上到下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
在这里插入图片描述
线索二叉树
中序遍历拯救世界
在这里插入图片描述
这里推荐一片实用的解析线索二叉树文章

树,森林,二叉树的转换
如果所有树都像二叉树一样方便处理就好了

普通树转二叉树
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述森林转二叉树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:普通树转二叉树,只有左子树;森林转二叉树,有左子树也又右子树。

二叉树到树和森林的转换-逆向过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结:一棵二叉树能不能转成森林,要看他有没有右子树,有就可以,否则就只能转换成森林

树和森林的遍历
树的遍历,分为先根遍历和后根遍历
遍历这棵二叉树
在这里插入图片描述
先根遍历:ABEFCGDHIJ
后根遍历: EFBGCHIJDA

森林也是分为前序遍历和后序遍历
敲黑板!
在这里插入图片描述
树和森林的序遍历 和 二叉树的序遍历结果一致
树和森林的序遍历 和 二叉树的序遍历结果一致
因此,解决的了复杂问题

赫夫曼树
无损压缩编码方案:如何使电文总长最短且不产生二义性
1.把二叉树简化为叶子结点带权值的二叉树
2.计算树的带权结点长度WPL
3.比较WPL。就像比较导航给的两种路径一样。WPL值越小,路径越短,构造出来的二叉树性能最优。
4.最优二叉树就是赫夫曼树
赫夫曼树构造过程动画
规律是先选权值最小的构造,小的放左边,大的放右边,不断往里加权值小的哪一个,比较根,更小放左边,更大放右边

赫夫曼编码
感兴趣的看看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值