红黑树
红黑树首先是一种树形结构,同时又是一个二叉树(每个节点最多只能有两个孩子节点,左节点小于等于父节点,右节点大于父节点),为了保证树的左右孩子树相对平衡(深度相同),红黑树使用了节点标色的方式,将节点标记为红色或者黑色,在计算树的深度时只统计黑色节点的数量,不统计红色节点数量,同时没有变量高度,增加了父亲节点、叔叔节点颜色变量等。
主要特点(规则)
在进行插入和删除时有可能会触发红黑树的插入平衡调整(balanceInsertion方法)或删除平衡调整(balanceDeletion )方法,调整的方式主要有以下手段:左旋转(rotateLeft方法)、右旋转(rotateRight方法)、颜色反转,进行调整的原因是为了维持红黑树的数据结构。
代码实现
声明变量
package edu.xalead.tree.redTree;
import com.sun.org.apache.regexp.internal.RE;
import sun.reflect.generics.tree.Tree;
public class TreeNode {
public static Boolean BLACK = false;//黑色
public static Boolean RED = true;//红色
private Object data = null;
private TreeNode left = null;
private TreeNode right = null;
private Boolean color = RED;
private TreeNode parent;
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
public Boolean getColor() {
return color;
}
public void setColor(Boolean color) {
this.color = color;
}
public TreeNode(Object data) {
this.data = data;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
添加数字所需要的接口
package edu.xalead.tree.redTree;
public interface