文章目录
1. 二叉树
1.1 定义
1.2 分类
1.2.1 满二叉树 / 完美二叉树
满足条件:
- 总的结点个数 2k - 1 个结点
1.2.2 完全二叉树
1.2.3 完满二叉树
满足条件:
- 除了叶子节点之外的每个节点都有2个子节点
1.2.4 二叉排序树 / 二叉查找树 / 二叉搜索树 Binary Search Tree
满足条件:
- 所有子树上面的左节点的值都比根结点要小,右节点的值都比根结点要大
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
- 任意结点的左右子树也都是二叉查找树
1.2.5 平衡二叉树 / AVL树 Balanced Binary Tree
它是二叉查找树最优的情况。它很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多
1.2.6 红黑树
一种自平衡二叉查找树, 通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保从根到叶子节点的最长路径不会是最短路径的两倍,用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决
2. 多叉树
2.1 B树 / B-树
是一种自平衡的多路搜索树(并不是二叉的),能够保证数据有序。同时它还保证了在查找、插入、删除等操作时性能都能保持在O(logn),为大块数据的读写操作做了优化,同时它也可以用来描述外部存储(支持对保存在磁盘或者网络上的符号表进行外部查找)
2.2 B+树
B+的搜索与B树也基本相同,区别是B+树只有达到叶子结点才命中(B树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找