AVL: http://www.oschina.net/code/snippet_176897_14149
二叉查找树: http://www.oschina.net/code/snippet_176897_14148
红黑树:http://www.oschina.net/code/snippet_176897_14155
SBT: http://www.nocow.cn/index.php/SBT
AVL: http://www.nocow.cn/index.php/AVL%E6%A0%91
Treap: http://www.nocow.cn/index.php/Treap
https://github.com/PeterRK/DSGO/blob/master/book/index.md
插入,删除
设n为树内节点个数,h为树的高度,
树的各种操作的复杂度都依赖于树的高度,所有操作的复杂度均为O(h), h可能log(n),也可能n
则普通的二叉查找树,操作复杂度均为log(n),最坏情况可能O(n),可以证明,随机构造的树的平均高度为log(n),所以平均复杂度为log(n)。
AVL树保持每个结点的左子树与右子树的高度差至多为1,从而可以证明树的高度为O(log(n))。
Insert操作与delete操作的复杂度均为log(n),旋转操作可能会达到log(n)次
红黑树赋予了树一定的性质,从而在保持这些性质的同时,能保证树的高度为log(n)。
性质中如:节点有红黑2色,其中路径中黑结点数目相同。红节点的2个子结点均为黑,根节点为黑,NIL节点为黑。
红黑树的insert操作,在最普通的insert()后,调用insert_fixup()来保持树的节点的性质。
Insert()的复杂度log(n),insert_fixup()复杂度也为log(n),另外insert_fixup()里可能有旋转操作,不过至多进行2次,每次复杂度均为O(1)
代码中一共3种情形,除了case1可能调用log(n)次,其它2种情况最多执行1次。
红黑树的delete操作,同样在正常的delete()操作后,调用delete_fixup()来保持节点的性质。
delete ()的复杂度log(n), delete_fixup()复杂度也为log(n),另外delete_fixup()里可能有旋转操作,不过至多进行3次,每次复杂度均为O(1)
代码一共4种情形,除了case2可能循环log(n)次,其它3种情况最多执行1次。
Treap树堆,保证是树的同时又是一个堆,可以证明树堆的期望复杂度为log(n), 因此所有操作的期望复杂度也为log(n)。