二叉树
由一个一个的节点组成,每一个节点最多只有两个子节点,这样的数称之为二叉树,注: 根节点只能有一个
二叉查找树(二叉排序树、二叉搜索树)
在二叉树的基础上对左节点和右节点的大小进行限制
要求
任何一个节点,左节点都比自己小、右节点都比自己大
平衡二叉树
- 二叉树的左右两个子树的高度差不超过1
- 任何节点的左右两个子树都是一颗平衡二叉树
平衡二叉树旋转的四种情况
-
左左: 当根节点左子树的左子树有节点插入,导致二叉树 * 不平衡此时将整个树右旋即可
-
左右: 当根节点左子树的右子树有节点插入,导致二叉树 * 不平衡先将左子树左旋,再将整个树右旋
-
右右: 当根节点右子树的右子树有节点插入,导致二叉树 * 不平衡此时将整棵树左旋即可
-
右左: 当根节点右子树的左子树有节点插入,导致二叉树 * 不平衡先将右子树右旋,在将整个树左旋
红黑树(平衡二叉B树)
- 每一个节点都是红色,或者是黑色的
- 根节点必须是黑色
- 如果一个节点没有子节点或者父节点,则该节点对应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点Nil都是黑色的
- 如果一个节点是红色的,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)
- 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
变换规则
- 其父节点是红色,叔叔节点也是红色
- 将父节点设为黑色,叔叔节点也设为黑色
- 祖父节点设为红色
- 如果祖父节点为根节点,则将根节点再次变成黑色
节点设为红色
- 如果祖父节点为根节点,则将根节点再次变成黑色