java红黑树 二叉树_Java 数据结构—树(二叉查找树/平衡二叉树/红黑树)

简介:树是一种数据结构,二叉树是指最多有两颗子树的树。

一、二叉查找树(BST)

1. 定义:BST全称是Binary Search Tree,又称二叉搜索树,亦称二叉排序树,在一般情况下,查询效率比链表结构要高;

2. 性质

A. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

B. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

C. 任意节点的左、右子树也分别为二叉查找树;

D. 所有节点存储一个关键字,且没有键值相等的节点。

java红黑树 二叉树_Java 数据结构—树(二叉查找树/平衡二叉树/红黑树)_第1张图片

3. 遍历方式

A. 前序遍历:先访问根结点,再遍历左子树,最后遍历右子树;

B. 中序遍历:先遍历左子树,再访问根结点,最后遍历右子树,该遍历的结果是顺序(有序)的;

C. 后序遍历:先遍历左子树,再遍历右子树,最后访问根结点。

二、平衡二叉树(AVL)

1. 定义:平衡二叉树(Balanced Binary Tree),具有如下特点

A. 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1;

B. 左右两个子树都是一棵平衡二叉树。

2. 旋转方式

A. LL(左左)的旋转

B. RR(右右)的旋转

C. LR(左右)的旋转

D. RL(右左)的旋转

三、红黑树(RBT)

1. 定义:红黑树(Red Black Tree)是一个自平衡二叉搜索树,除了满足二叉搜索树的特点外,还具有如下特点

A. 每个节点颜色不是黑色,就是红色;

B. 根节点是黑色的;

C. 如果一个节点是红色,那么它的两个子节点就是黑色的(没有连续的红节点);

D. 对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点;

E. 每个为空的(NIL或null)叶子节点都是黑色的。

注意:红黑树的由来是因为二叉查找树可能退化成链表,导致时间复杂度变为O(n),而平衡二叉树维护平衡的代价开销过大。

java红黑树 二叉树_Java 数据结构—树(二叉查找树/平衡二叉树/红黑树)_第2张图片

2. 红黑树的自我修正方式

A. 改变节点颜色;

B. 左旋:待旋转的节点从右边上升到父节点就是左旋;

C. 右旋:待旋转的节点从左边上升到父节点就是右旋;

3. 应用场景

A. Java中ConcurrentHashMap和TreeMap底层实现。

你可能感兴趣的:(java红黑树,二叉树)