红黑树是二叉搜索树中的一种,只不过增加了一个性质“在所有的叶子到根的路径中,没有一条路径会比其他路径长出2倍”,因此,可以保证最坏情况下基本动态集合操作(例如删除节点、插入节点和查找节点)的时间复杂度为O(lg n),本篇是第一部分,二叉搜索树。 二叉搜索树 既然红黑树是二叉搜索树,我们先来认识一下二叉...
RBTreeNode * y = p->p;while(y!=NIL && y->left==p) {// 找到高层节点中以p所在的树为右子树的树的根节点,即是前驱节点p = y; y = y->p; }returny; } }/// 查找结点后继节点(结点)RBTreeNode *search_successor(RBTreeNode * p){if(p == NIL)returnNIL;if(p->right != NIL) {...
将红黑树内的某一个节点删除。需要执行的操作依次是:首先,将红黑树当作一颗二叉查找树,将该节点从二叉查找树中删除;然后,通过"旋转和重新着色"等一系列来修正该树,使之重新成为一棵红黑树。详细描述如下: 第一步:将红黑树当作一颗二叉查找树,将节点删除。 这和"删除常规二叉查找树中删除节点的方法是一样的"。...
1.从二叉搜索树→AVL,严格控制左右子树高度差,避免二叉搜索树退化成链表(时间复杂度从O(log2N)退化成O(N) 2.从AVL→→→红黑树,牺牲严格的平衡要求,以换取新增/删除节点时少量的旋转操作,平均性能优于AVL;通过红黑规则,保证在最坏的情况下,也能拥有O(log2N)的时间复杂度新城 3.红黑树的应用:Java...
红黑树的查找,插入和删除操作,时间复杂度都是O(logN)。 红黑树和AVL树的比较: 1, AVL树的时间复杂度虽然优于红黑树,但是对于现在的计算机,cpu太快,可以忽略性能差异 2, 红黑树的插入删除比AVL树更便于控制操作 3, 红黑树整体性能略优于AVL树(红黑树旋转情况少于AVL树) ...
一、查找 1、查找类型 静态查找:只检查是否存在 ① 顺序查找:O(n) ② 折半查找:O(logn) ③ 分块查找 动态查找:检查是否存在,不存在执行插入操作,存在执行删除操作或修改 ① 二叉树查找:最好O(logn),最坏O(n) B-树查找:O(logn) 红黑树查找:O(logn) ...
所以,顺序查找的时间复杂度为O(n)。 //顺序查找C语言实现//基本思路:用顺序结构存储数据(数组、链表),从前到后依次查询目标值,//如果发现则返回查找到的值,否则返回0.#include<stdio.h>intFindBySeq(int*ListSeq,intListLength,intKeyData);intmain() ...
和插入操作一样,结点的删除操作的时间复杂度也是O(log2@N)[注:以2为底数,N为对数],但删除操作的处理更复杂一些。 2 删除处理 2.1 外部接口 调用接口删除指定key结点时,其内部首先会查找红黑树中是否存在key结点。如果key结点不存在,则无需进行任何的处理;如果key结点存在,则调用_rbt_delete()删除结点。
《算法导论》这本书指出,红黑树检索的时间复杂度为Log2(N),这是比较高效的算法,例如: 如果map包含64个记录,查询某个记录最多只需要对比6次; 包含1000个记录的map,查询某个记录最多只需要搜索10次; 包含100万个记录的map,查询某个记录最多只需要搜索20次。