3、树
树是n个节点的有限集。
3.1 基本概念
结点的度:结点有的子数个数
树的度:结点度的最大值
树的深度:树有几层
满二叉树:所有节点都有左右子树,所有子树在同一层
非叶子节点度一定为2
完全二叉树:将二叉树按从上到下、从左到右的顺序编号为1~n,若该编号与满二叉树编号相同,即为完全二叉树。
3.2 二叉树遍历:每个节点仅被访问一次(遍历的名称以根节点位置命名)
前序遍历:根——左——右:1、2、4、8、9、5、10、3、6、7(按上图完全二叉树)
中序遍历:左——根——右
后序遍历:左——右——根
3.3 哈弗曼树(WPL):带权路径最短的长度
求解左右哈夫曼树及D结点哈弗曼编码:A(3)、B(6)、C(7)、D(2)、E(5)、F(1)
(1)将给定结点按权值从小到大排列
(2)权值最小的结点放在左树,次小的结点放在右树。根节点用N替代。
(3)将新根节点和权值插入到原序列中,替代初始的两个子结点。
(4)一次重复上述步骤。
(5)哈弗曼编码:所有左子树权值用0代替,右子树权值用1 代替,按总上往下编码
3.4 二叉查找树(二叉搜索树、二叉排序树)
(1)若左子树不空,左子树所有节点的值小于根节点的值
(2)若右子树不空,右子树所有节点的值大于根节点的值
(3)左右子树也分别为二叉查找树
3.5 平衡二叉树(AVL)
(1)是一颗二叉排序树
(2)左右子树高度相差最多为1
(3)平衡因子BF:结点左子树深度减右子树深度(-1、0、1)
(4)最小不平衡树:距离新插入结点最近的,平衡因子绝对值大于1的结点构成的子树
(5)插入新节点时,检查是否破坏了数的平衡性。若非平衡时,需要旋转达到新的平衡。平衡因子为正,则进行右旋(顺时针旋转);若平衡因子为负,则进行左旋(逆时针旋转)。
3.6 多路查找树(B树):需要操作的数据集非常大,降低访问次数
(1)每棵树有多个节点或0个节点
(2)属于平衡查找树
(3)结点最大的孩子数称为B树的阶
(4)根节点不是叶节点时,最少有2棵子树
3.7 B+树:适合带有范围的查找
注:以上部分内容来自《大话数据结构》