这一篇适合有一定数据结构基础的兄弟,如果是新手 请先学习基本、简单的树结构。理解之后再学习红黑树
树结构的延申
我们知道正常的树结构节点里面 一般包含以下内容:
值,左右子节点,父节点
class TreeNode {
int value;
TreeNode left;
TreeNode right;
TreeNode parent;
public TreeNode(int value) {
this.value = value;
this.left = null;
this.right = null;
this.parent = null;
}
}
红黑树作为它的拓展 ,它在传统的树结构中加了一个属性
Color:用来标记红色和黑色。
看这就是一个标准的红黑树节点
class Node {
int key;
Node left;
Node right;
Node parent;
boolean color;
public Node(int key) {
this.key = key;
this.left = null;
this.right = null;
this.parent = null;
this.color = RED; // 默认插入的节点为红色
}
}
首先我们要理解 红黑树 为什么要加一个颜色节点?
它的目的是什么?
它的目的是尽量的维持一个二叉搜索树的平衡。 因为树越平衡,那么它查询的性能就越稳定
红黑树的基本性质
- color 节点 只有红黑两种结果 (所以它可以是个boolea值)
- 所有的null值 视为黑色
哪里会有null值 比如 所有的叶子节点 的子节点都是null
再比如 只有一个左右子节点 的节点 它的另一半是空的 也视为null - 红色节点不能相邻
- 根节点必须是黑色
- 最重要的一条:从根节点到任意一个叶子节点 路径中的黑色节点一样