一直对红黑树十分困惑,不知道给二叉树节点加上颜色比较的用处到底是什么。
今天花时间把这块整理一下,帮助记忆。
AVL树
AVL 是高度平衡的二叉树,每一棵树的平衡因子都小于或等于1,即左右子数高度相差 1
AVL 树的查询效率为 O(lgN) ,N为节点数。
同时,向AVL树进行插入和删除操作会导致其不在平衡,需要进行至多O(lgN)次调整。
调整的方式主要有4种:
1) 左旋转
2) 右旋转
3) 先左后右旋转
4) 先右后左旋转
详细见 http://zh.wikipedia.org/wiki/AVL%E6%A0%91
红黑树
红黑树主要是在AVL树的基础之上提出的,在牺牲查询较少的查询效率的情况下,减少插入和删除时的调整次数。
红黑树的最差查询效率为 O(2lg(N+1)) ,而插入和删除节点只需要进行两到三次调整即可
过程有些复杂,没有耐心写,只好借用一下别人的介绍了。
http://blog.csdn.net/eric491179912/article/details/6179908
http://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91
以后再慢慢实现吧,今天实在是写不动代码了。。。