为什么二叉树这么重要,而不是三叉树、四叉树(二分法)
- 数组:查找快,增删慢O(n)
- 链表:查找慢,增删快O(1)
- 二叉搜索树BST: 查找快,增删快---“木桶效应”
平衡二叉树
- BST如果不平衡,那就成链表了
- 所有要尽量平衡:平衡二叉搜索树BBST
- BBST增删查,时间复杂度都是n(logn),即树的高度
红黑树
一种自平衡二叉树 分为红、黑两种,通过颜色转换来维持树的平衡 相对于普通平衡二叉树,它维持平衡的效率更高
B树
- 物理上是多叉树,但逻辑上是二叉树
- 一般用于高效I/O,关系型数据库常用B树老组织数据
总结
- 数组、链表,各有各的缺点;
- 特定的二叉树可以让整体效果最优;
- 各种高级二叉树,继续优化,满足不同场景;
堆栈模型
- JS执行代码时
- 值类型变量,存储在栈
- 引用类型变量,存储在堆
堆
- 完全二叉树
- 最大堆:父节点>=子节点
- 最小堆:父节点<=子节点
逻辑结构VS物理结构
- 堆,逻结构是一颗二叉树
- 但它物理结构是一个数组
- 数组:适合连续存储+节省空间
堆 VS BST
- 查询比BST慢
- 增删比BST快,维持平衡更快
- 但整体的时间复杂度都在O(logn)级别,即树的高度