摘要:
伸展树结合了二叉搜索树BST及二叉平衡树AVL的旋转特点,在每一次访问到某节点时都通过旋转将该节点往上推一位,由于没有保存高度信息因为空间复杂度稍优于二叉平衡树。伸展树的插入,删除,搜索的平均时间复杂度均为o(logn),极端情况下为o(n)。伸展树适用于关注用户习惯性行为,用户经常使用的节点将靠近根节点,而用户不经常使用的将远离根节点。具体实现代码为:与BST树实现代码一样,如果伸展树遇到不平衡的情况下,代码中的递归调用将会溢出。 1 template<typename T> 2 struct splay_tree_node 3 { 4 splay_tree_node(con.. 阅读全文
摘要:
二叉平衡树又称为AVL树。它继承了二叉搜索树的规则,并加了一个规则。它的规则是:1.每个结点的左子树和右子树的高度最多差1.二叉平衡树由于不会产生像二叉搜索树那样的极端情况,所以查找,删除(懒惰删除)的时间复杂度为o(logn)。插入操作需要对树作出调整,所以时间复杂度略高于o(logn)。如图所示,a-1为AVL树,而a-2则不是AVL树。插入操作需要旋转树以维持高度差最多为1这一特点。把必须重新平衡的节点叫作a。由于任意结点最多有两个儿子,因此高度不平衡时,a点的两棵子树的高度差2。将会出现以下四种不平衡的情况:1.对a的左儿子的左子树进行一次插入。2.对a的左儿子的右子树进行一次插入。3 阅读全文