各种查找或者排序树

1. 用于查找的树

1.1 二叉排序树SBT

1.1.1 定义

二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。

1.1.2 查找插入和删除操作

  • 查找:
  • 插入:每次插入的新节点都是二叉排序树上新的叶子节点,不必移动其他节点,仅需要改动某个节点的指针,由空变成非空。
  • 删除:比较复杂,分3种情况。

1.1.3 为什么叫二叉排序树?

因为中序遍历二叉排序树可得到一个关键字的有序序列。一个无序序列可以通过构造一颗二叉排序树而变成一个有序序列,构造树的过程就是对无序序列进行排序的过程。

1.2 平衡二叉树

1.2.1 定义

  • 平衡二叉树,Balanced Binary Tree 或 Height-Balanced Tree,又称AVL树。我们知道,对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,提高它的操作的时间复杂度。
  • 平衡二叉搜索树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
  • 常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度。

1.2.2 二叉排序树转化为平衡树

1.3 红黑树

1.4 B-树

1.5 B+树

1.6 键树

2 用于内部排序的树

2.1 堆排序

优先队列,二叉堆

3 外部排序

猜你喜欢

转载自blog.csdn.net/JackComeOn/article/details/86539020