树
丶丶路遥
这个作者很懒,什么都没留下…
展开
-
红黑树
1 描述在之前描述的AVL树中,对于删除某个元素导致树不平衡的情况,需要进行旋转调整,使之恢复平衡。然而,该过程可能需要沿着parent关系经历O(logn)次旋转操作才可使得整棵树平衡。因此,在此基础上设计出来另外一种数据结构–红黑树,它的添加和删除的旋转操作都是O(1)级别,但需要牺牲一些平衡性。文章省略了对于B树,AVL树的一些性质和操作的描述,可参考AVL树、B树。1.1性质红黑树需满足以下几条性质:结点是RED或者BLACK根结点是BLACK叶子结点外(这里指外部的空节点)都是B原创 2020-06-07 16:35:43 · 302 阅读 · 0 评论 -
B树
1 描述B树中的一个结点存放多个元素,并允许存在多个子结点,元素与子结点的对应关系为N+1关系,如下图所示。上图秒速了一棵4阶B树(度最多为4),当前元素大于左子树中的任意元素,小于右子树中的任意元素。1.1 性质假设我们要构造一棵m阶B树,其存在如下性质:根节点元素个数:1≤x≤m-1非根节点元素个数:⌈m/2⌉-1≤x≤m-1根节点子节点个数:2≤y≤m非根节点子节点个数:⌈m/2⌉≤y≤m2 操作流程对于任意一棵B树,需要符合1.1中的性质。在插入和删除元素的过程中有可能破坏原创 2020-06-05 20:02:11 · 258 阅读 · 0 评论 -
AVL树
描述AVL树是在儿叉搜索树的基础上衍生出来的数据结构。在儿叉搜索树中,高度取决于结点数据的大小的排序和插入顺序,在某些情况下,儿叉排序树的高度非常高,甚至退化成链表,使得其查找效率低下。因此,AVL树引入“平衡因子”的概念,平衡因子=左子树高度-右子树的高度。AVL树规定平衡因子的绝对值不大于1来保证二叉树的平衡。操作流程添加结点情况添加一个结点对其父节点影响不会导致其失衡,而可能导致祖父结点失衡(可能所有祖父结点),因此只需让高度最低的失衡结点恢复平衡即可使得整棵树平衡,旋转操作次数为O(1)。原创 2020-06-03 06:39:12 · 220 阅读 · 0 评论 -
二叉排序树
描述在二叉树的基础上衍生出的数据结构,对任意结点左右孩子节点之间都有顺序,如:左孩子<当前节点<右孩子节点。因此,提高了有序数据的搜索速率,类似于二分搜索法。关于二叉树的在之前的章节中有描述。具体参考:二叉树的描述与实现接口设计public interface BSTree<E> { //添加元素 void add(E element); //删除元素 void remove(E element); //是否包含当前元素 boolean contains(E e原创 2020-06-03 03:26:42 · 187 阅读 · 0 评论 -
二叉树
二叉树一个节点有两个后继,称为左右孩子,左右孩子有序不能相互跌倒。二叉树又衍生出多种不同的形态,如红黑树、二叉排序树、B-树、AVL树等。原创 2020-06-03 01:42:23 · 210 阅读 · 0 评论