二叉树总结

1、定义

树是n(n>=0)个节点的有限集,n=0是称为空树。
在任意一个非空树中:有且只有一个根节点root;当n>1时,其余节点可分为m(m>0)个互不相交的集合,每个集合又是一棵树,称为子树。

节点拥有的子树的数目称为度。
在这里插入图片描述

节点关系

孩子节点:节点子树的根节点,B是A的孩子节点
双亲结点:孩子节点的上级节点,A是B的双亲结点
兄弟节点:同一个双亲结点直接称为兄弟节点,B和C互为兄弟节点(他们共一个A作为双亲节点)

节点层次

从根节点开始定义,根节点为第一层,孩子节点为第二层,以此类推;
在这里插入图片描述

树的高度

树中节点的最大层次数称为树的深度或高度,上图共四层,所以深度/高度为4

2、二叉树

定义

n个节点的有限集合,该集合可能为空集(空二叉树)或者有1个根节点和1个或2个互不相交的分别称为根节点的左子树和右子树组成。
如下普通二叉树:
在这里插入图片描述

二叉树的特点

1、每个二叉树最多只有2个节点,也就是每个节点的度不大于2
2、左右子树有顺序,即使只有1个节点,也要区分是左节点还是右节点

二叉树的性质(待)

斜树

所有节点都在左子树的二叉树叫左斜树,所有节点都在右子树的二叉树叫右斜树,统称斜树

满二叉树

二叉树中,所有分支节点都存在左节点和右节点,并且叶子结点都在同一层
特点:
叶子节点只会出现在最下层;非叶子节点的度都是2;同样深度的二叉树,满二叉树的节点和叶子最多

完全二叉树

对一颗具有n个节点的二叉树编号,如果编号n(1<=i<=n)的节点与同样深度的满二叉树中编号为i的节点在二叉树中位置相同,这称为完全二叉树。(叶子结点只会出现在最后2层,且最后一层的叶子结点靠左对齐)
在这里插入图片描述
特点:
1、叶子节点只会出现在倒数2层
2、最下层的叶子结点集中在树的左侧
3、倒数第二层若存在叶子节点,一定在右侧连续位置
4、如果度为1,则一定只有左孩
5、同样节点的二叉树,完全二叉树的深度最小(满二叉树是完全二叉树)

3、二叉树的存储结构

顺序存储

使用一维数组存储二叉树中的节点,节点的存储位置对应数组的下标:

在这里插入图片描述

二叉链表存储

由于二叉树只有最多2个节点,则可定义1个数据,2个指针域的结构
在这里插入图片描述

二叉树的遍历

前序遍历

从根节点出发,第一次遇到节点就输出节点数据,按照先左后右顺序输出

在这里插入图片描述

中序遍历

从根节点出发,第二次到达节点时输出数据
如上图:a->B->D->H,第一次到H,再到H的左节点,无返回H(第二次),输出H;
返回D(第二次),输出D;
到I,I的左子树,返回I(第二次),输出I;
返回D(第三次不输出),到B(第二次),输出B;
最终:HDIBJEAFCG

后序遍历

从根节点出发,第三次到达节点时输出数据
如上图,A->B->D->H,第一次到H,再到H左节点,无返回H(第二次),再到H右节点,无返回H(第三次),输出H;
返回D(第二次),到I->I的左节点后返回I(第二次)->I的右节点返回I(第三次),输出I;
返回D(第三次),输出D;
所以总的为,HIDJEBFGCA

层次遍历

自上而下遍历:ABCDEFGHIJ

考点:根据前序遍历和中序遍历确定一颗二叉树:原理就是,前序遍历第一个为根节点(后续遍历最后一个为根节点),中序遍历的根节点左右侧为对应的左右子节点,以此类推
在这里插入图片描述

二叉搜索树

又称二叉查找树,二叉排序树;设x为其中一个节点,x节点包含关键字,节点x的key值记为key[x]。如果y是x的左子树中的一个节点,则key[y]<=key[x];如果y是x右子树的一个节点,则key[y]>=key[x];
特点:若左子树不空,则左子树上的所有节点均小于他的根节点;右类似左子树;左右子树也分别为二叉搜索树;
在这里插入图片描述

查找
1、如果树是空的,则查找结束,无匹配
2、如果被查找的值和节点的值相等,查找成功
3、如果被查找的值小于节点值,则递归查找左子树
4、如果被查找的值大于节点值,则递归查找右子树

插入
1、先检查钙元素是否存在树中,如果存在则不插入
2、如不存在则查找,并将元素插入查找结束的地方

删除
删除叶子节点 最简单直接找到删除即可
删除节点只有左子树 将删除的节点由左子树替代
在这里插入图片描述
删除节点只有右子树 将节点由右子树代替
删除的节点既有左子树又有右子树
方法一:删除前驱结点:遍历待删除的左子树,使用左子树最大节点代替待删除节点
方法二:删除后继节点:遍历待删除节点的右子树,使用右子树的最小节点代替待删除节点
在这里插入图片描述

平衡二叉树

左右子树高度不超过1的搜索二叉树称为平衡二叉树
在这里插入图片描述
平衡因子:左右节点的高度差,平衡二叉树中平衡因子只能取-1,1,0

左旋与右旋

RR(根节点的右孩子右节点插入节点)左旋LL:
40节点左子树高度1,右子树高度3,失衡;需要40做出旋转
40节点位置由右孩子节点代替;右孩子节点的左子树变为该节点的右子树;节点本身变为有孩子节点的左子树
在这里插入图片描述
LL(根节点的左孩子左子树插入节点)右旋
A节点失衡,A节点的左孩子节点B代替A位置;左孩子节点B的右孩子节点变为A节点的左孩子节点;A节点变为左孩子节点A的右孩子节点
在这里插入图片描述
LR(根节点的左孩子右节点插入节点)
先对失衡根节点A的B节点左旋,再对A进行右旋
在这里插入图片描述
RL(根节点的右孩子左子树插入节点)
右孩子节点进行右旋,再对根节点进行左旋
在这里插入图片描述
平衡二叉树的删除
操作同搜索二叉树,区别为:删除后是否平衡,不平衡需要旋转调整
**

2-3树

当平衡二叉树插入或删除时可能会破坏平衡,需要调整,有时调整的操作需要很多,影响性能,故引入2-3树
定义:有2-节点:同BST(搜索二叉树),一个数据域2个指针域;有3-节点,2个数据域,3个指针域;
每个节点有1个或2个关键码,1个关键码时有2个子树,2个关键码时有3个子树,所有叶子在同一层;
在这里插入图片描述

2-3-4树

定义:2-3树的扩展,每个节点由1或2或3个关键码,分别为2-、3-、4-;叶子节点在同一层;
在这里插入图片描述

红黑树

2-3-4和红黑树是完全等价的,如果一棵树满足红黑树,把红色节点收缩到其父节点就变成了2-3-4树;
红黑树的要求:
1、节点的颜色要么红色、要么黑色
2、根节点一定黑色
3、每个叶子节点都有2个空的黑色节点
4、每个红色节点的2个子节点都是黑色
5、从任一节点到它能到达的任一节点的简单路径都包含相同的黑色节点

一颗红黑树对应唯一形态的2-3-4树,一颗2-3-4树可对应多颗红黑树;
在这里插入图片描述
在这里插入图片描述

B树

B树又叫B-树,他是二叉搜索树的进阶,他是一颗多路的平衡查找数,描述一颗B树需求指定他的阶数,即节点最多有多少个节点;他的作用是降低二叉搜索树的高度,即将高瘦的树变为矮胖的树;

B+树

B+是B-的进阶优化,有更高的查询效率;
1、有2种节点:内部节点(索引节点)和叶子节点
2、根节点可以是内部节点也可以是叶子节点
3、内部节点只保存索引,所有数据都保持在叶子节点种
4、m阶B+树标识内部节点最多有m-1个关键字,阶数m也限制可叶子节点最多存储m-1个数据
5、内部节点的key都是有小到大排序
6、每个叶子节点都存有相邻叶子节点的指针

霍夫曼树

霍夫曼编码:基于最小冗余编码的压缩算法,如果知道一组数据中哥哥符号出现的频率,就可以用特殊的方法来表示符号从而减少数据要求的存储控件。
霍夫曼树:给定n个权值作为n个叶子节点,构造一颗二叉树,若带权路径长度达到最小(权值较大离根近,字符串出现的频率称为权),称为最优二叉树,也叫霍夫曼树。

构造霍夫曼树

在这里插入图片描述
生成霍夫曼编码:
在这里插入图片描述
摘自:https://xiaozhuanlan.com/topic/7189032546

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值