二叉堆

引用自

二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:最大堆和最小堆。
最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。
二叉堆一般都通过”数组”来实现.

以下内容基于已起始索引为1的二叉堆.

性质

索引相对固定。
对于索引为i 的结点, 它的左结点索引为 2 i, 右结点索引为 (2 i + 1), 父节点为 floor(i / 2)

插入

先将结点放在数组的最后, 然后一直与父结点比较交换, 直到换不动为止。

删除

先将对应结点删除, 然后将数组最后的结点交换到此位置, 然后选取交大的子结点与它交换, 直到不能再换为止

二叉排序树

二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:
二叉排序树

性质

  1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 它的左、右子树也分别为二叉排序树。

前驱

左子树中的最大子结点, 沿着左子树一直往右找

后继

右子树中的最小子结点, 沿着右子树一直往左找

查找

在二元排序树b中查找x的过程为:
1.若b是空树,则搜索失败,否则:
2.若x等于b的根节点的数据域之值,则查找成功;否则:
3.若x小于b的根节点的数据域之值,则搜索左子树;否则:
4.查找右子树。

插入

根据查找的结果, 插入到合适的位置

删除

若删除的是叶子节点, 直接删除
若节点只有一个子树, 则直接将子树替换到节点当前位置即可
若节点有两颗子树,则可找到节点的直接后继节点, 然后将其替换到节点位置

AVL 树


https://leafflow.top/2023/02/07/algorithm/二叉堆/
作者
vollen
发布于
2023年2月7日
许可协议