平衡树(AVL树)
定义:
它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
实现方法
红黑树、AVL、替罪羊树、Treap、伸展树
堆
定义:堆是一种平衡二叉树,父节点小于子节点,多余的子节点尽可能的放在左子节点,左右子节点无大小关系。可以用数组实现<br>
支持操作:O(log N) Add / O(log N) Remove / O(1) Min or Max
Max Heap vs Min Heap
值特性:对于min堆,父节点小于子节点,左右子节点无大小关系;对于max类型堆,父节点大于子节点,左右子节点无大小关系;
结构特性:是个二叉树,高度logN
时间复杂度:delete, pop 复杂度都是logN,求min,or max复杂度O(1)<br>
插入方法:永远从左侧插入,保证是一个平衡二叉树,如果插入数字小,那就上移,父节点下移。所以复杂度最大就是logN<br>
删除方法类似
实现方法:练习题:lintcode 130 heapify<br>
面试练习题
104. Merge K Sorted Lists<br>612. K个最近的点<br>545. 前K大数 II<br>613. 优秀成绩<br>486. Merge K Sorted Arrays<br>81. 数据流中位数<br>544. 前K大数<br>401. 排序矩阵中的从小到大第k个数