二叉排序树
- 查找二叉排序树
比当前结点小则走向该节点的左孩子,比当前结点大则走向右孩子。不断向下走直至找到目标结点或者走到空即为未命中。 - 二叉排序树的插入
包含排序树的查找过程。
先将待插入数字作为查找目标开始查找;若在树内命中说明已经存在无需再插入;若未命中,则最后查找到达的空树处即为应该插入的位置。 - 二叉排序树的删除
一个递归的过程。
若待删除结点为叶节点,直接删除。
若待删除结点有左右孩子,将其值改为其直接后继的值。则待删除结点变为其直接后继结点。(若无右孩子则改为直接前驱,若左右孩子都有或只有右孩子都改为直接后继)
不断递归直至其直接后继为叶节点,回到第一步即直接删除。 - 二叉排序树查找效率
注意计算查找成功平均次数和查找失败平均次数。(书P190 T1)
二叉排序树的插入删除时间复杂度为O(logn).
AVL树
- 平衡因子
左树高度-右树高度 - 调整AVL树
tip:
- 每次调整的对象都是最小的不平衡子树
- 对于双旋转:先对不平衡子树的左or右孩子进行操作,再对根节点操作
- 对于单旋转:直接对子树根节点操作
- 若是子树的右孩子造成不平衡,则左旋;反之右旋
根据以上四点处理LL,LR,RR,RL即可。
LL:失衡结点的左子树的左孩子的原因。则右旋
RR:失衡结点的右子树的右孩子的原因。则左旋
LR:失衡结点的左子树的右孩子的原因。则左旋+右旋
RL:失衡结点的右子树的左孩子的原因。则右旋+左旋
- AVL树的查找效率
有n个结点的AVL树的最大深度为O(log2N),因此平均查找长度为O(log2N)。 - 平衡二叉树结点的递推公式:N0=1,N1=2,Nh=Nh-1+Nh-2+1
由此构造出的二叉树也是由最少结点构造出的保持该高度的AVL树
哈夫曼树与编码
-
名词释义
- 权:结点带的数值
- 带权路径长度(WPL):从树根到某叶节点的路径长度(边数)与该叶节点的权的乘积称为该结点的带权路径长度;而树的带权路径长度就是所有叶节点的WPL的和
- 哈夫曼树:WPL最小的树
-
哈夫曼树构造法
书P180
注意哈夫曼树的构造不唯一,但是其WPL都相同且为最优 -
哈夫曼编码中,有效前缀的检验方法:构造哈夫曼树,并在构造的过程中对前缀的有效性进行检验。P196
-
对于哈夫曼树,若其度为m(注意树的度与节点的度的区别)。则说明该树中的结点只有度为m和0两种。