1 树(Tree)
1.1 特点
(1)Linked List是特殊化的Tree;Tree是特殊化的Graph。
1.2 演示
(1)示例
2 二叉树(Binary Tree)
2.1 特点
(1)构造
(2)示例
2.2 分类
(1)满二叉树
(2)完全二叉树
2.3 二叉树遍历
(1)前序遍历( Pre-order ) : 根 - 左 - 右;
(2)中序遍历( In-order ) : 左 - 根 - 右;
(3)后序遍历( Post-order ) : 左 - 右 - 根;
3 图(Graph)
3.1 特点
(1)树和图的区别:树没有环,图的节点有环
3.2 演示
(1)示例
3.3 总结
(1)Linked List是特殊化的 Tree;Tree是特殊化的 Graph;
4 二叉搜索树(Binary Search Tree)
4.1 特点
(1)二叉搜索树,也称二叉排序树、有序二叉树(Ordered Binary Tree)、排序二叉树(Sorted Binary Tree),是指一棵空树或者具有下列性质的二叉树:
- 左子树上所有结点的值均小于它的根结点的值;
- 右子树上所有结点的值均大于它的根结点的值;
- 以此类推:左、右子树也分别为二叉查找树。 (这就是 重复性!)
(2)中序遍历结果:升序排列;一般来说我们会把树变得有序,这样才有树存在的意义,否则就跟普通链表一样了。普通的没有任何状态的树,查找节点需要遍历整棵树,时间复杂度是O(n)。
4.2 演示
(1)示例
4.3 缺点:极端情况,二叉搜索树退化成为链表,查找是O(n);
4.4 常见操作
(1)查询 O(logn);
(2)插入新节点(创建) O(logn);
(3)删除 O(logn);
(5)二叉搜索树Demo;
5 AVL树和红黑树
5.1 保证性能的关键
(1)保证二维维度! - >左右子树结点平衡(recursively)
(2)Balanced
5.2 AVL树
5.2.1 特点
5.2.2 基本操作
(1)记录左右子树高度
(2)增加 14
(3)增加 3
5.2.3 旋转操作
(1)左旋
(2)右旋
(3)左右旋
(4)右左旋
5.2.4 带有子树的旋转
(1)特点
参考动画:知乎:leetcode刷题(十):树(红黑树,B树)
(2)参考动画
(3)向右旋转
(4)增加 15
5.2.5 总结
5.3 红黑树
5.3.1 特点
(1)特点
(2)关键性质
(3)示例
5.3.2 AVL树比红黑树对比
(1)AVL树比红黑树提供更快的查找速度,因为它们更严格平衡;
(2)与AVL树相比,红黑树提供更快的插入和删除操作;较少的旋转是由于相对宽松的平衡
(3)AVL树存储每个节点的平衡因子或高度,因此需要存储每个节点一个整数,而RedBlack树只需要1位信息节点;
(4)大多数都使用红黑树。与MAP一样,Multimap m dtisetin C++在数据库中使用AML树,需要更快的检索。