算法刻意练习之树/二叉树/二叉搜索树/AVL树和红黑树

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),是指一棵空树或者具有下列性质的二叉树:

  1. 左子树上所有结点的值均小于它的根结点的值
  2. 右子树上所有结点的值均大于它的根结点的值
  3. 以此类推:左、右子树也分别为二叉查找树。 (这就是 重复性!)

(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树,需要更快的检索。

6 时间复杂度

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值