红黑树1

1.R-B Tree简介

红黑树又称“R-B Tree”,他是一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。

红黑树的特点:

1.每个节点或者是黑色,或者是红色。

2.跟节点是黑色。

3.每个叶子节点(NIL)是黑色。[这里的叶子节点是指为空(NIL或者NULL)的叶子节点]

4.如果一个节点是红色的,则它的子节点必须是黑色的。

5.从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。(确保没有一条路径会比其他路径长出两倍。因而,红黑树是相对接近平衡的二叉树)

红黑树的时间复杂度为:O(lgn)

红黑树的基本操作(一) 左旋和右旋

红黑树的基本操作是添加和删除。在对红黑树进行添加或删除之后,都会用到旋转方法。为什么呢?道理很简单,添加或删除红黑树中的节点之后,红黑树就发生了变化,可能不满足红黑树的5条性质,也就不再是一棵红黑树了,而是一棵普通的树。通过旋转,可以使这棵树重新成为红黑树。简单点说,旋转的目的就是让树保持红黑树的特性。

旋转包括两种:左旋和右旋。下面分别对它们进行介绍。

1. 基本定义

public class RBTree<T extends Comparable<T>>{
    private RBTNode<T> mRoot;

    private static final boolean RED = false;
    private static final boolean BLACK = true;

    public class RBTNode<T extends Comparable<T>>{
        boolean color;
        T key;
        RBTNode<T> left;
        RBTNode<T> right;
        RBTNode<T> parent;
        public RBTNode(T key, boolean color, RBTNode<T> parent, RBTNode<T> left, RBTNode<T> right) {
            this.key = key;
            this.color = color;
            this.parent = parent;
            this.left = left;
            this.right = right;
        }
    }
......
}

2.左旋

对x进行左旋,意味着“将x变成一个做节点”。

左旋的实现代码(java)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值