红黑树插入时的自平衡红黑树插入时的自平衡
红黑树插入时的自平衡红黑树插入时的自平衡
红黑树实质上是一棵自平衡的二叉查找树,引入带颜色的节点也是为了方便在进行插入或删除操作时,如果破坏了二叉查找树的平衡性能通过一系列变换保持平
衡。
红黑树的性质红黑树的性质
每个节点要么是红色,要么是黑色
根节点必须是黑色
两个红色节点不能相连
从根节点出发到达任意叶子节点经过的黑色节点个数相同
红黑树的数据结构红黑树的数据结构
红黑树实质上是一颗二叉查找树,左子树的值小于根节点的值,右子树的值大于根节点的值。
public class RedBlackTree {
private static int BLACK = 1;
private static final int RED = 0;
private static Node root;
private static class Node {
private int color = RED;
private int data;
private Node left;
private Node right;
private Node parent;
Node(int data) {
this.data = data;
}
}
}
红黑树的插入红黑树的插入
插入的节点默认是红色的(要不然全是黑色节点它也满足红黑树的定义,不过就没意义了);
由于红黑树是一颗二叉查找树,所以它的插入可以使用递归(先不考虑破坏红黑树的结构)
/**
* 通过递归往红黑树中插入一个新节点
* @param root 要插入的树的根节点
* @param data 新节点的值
*/
private void insert(Node root, int data) {
if(root.data > data) {
if(root.left == null) {
Node node = new Node(data);
root.left = node;
node.parent = root;
} else {
insert(root.left, data);
}
}else {
if(root.right == null) {
Node node = new Node(data);
root.right = node;
node.parent = root;
} else {
insert(root.right, data);
}
}
}
调整结构调整结构