Java 数据结构—树(二叉查找树/平衡二叉树/红黑树)
简介:树是一种数据结构,二叉树是指最多有两颗子树的树。
一、二叉查找树(BST)
1. 定义:BST全称是Binary Search Tree,又称二叉搜索树,亦称二叉排序树,在一般情况下,查询效率比链表结构要高;
2. 性质
A. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
B. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
C. 任意节点的左、右子树也分别为二叉查找树;
D. 所有节点存储一个关键字,且没有键值相等的节点。
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),而平衡二叉树维护平衡的代价开销过大。
2. 红黑树的自我修正方式
A. 改变节点颜色;
B. 左旋:待旋转的节点从右边上升到父节点就是左旋;
C. 右旋:待旋转的节点从左边上升到父节点就是右旋;
3. 应用场景
A. Java中ConcurrentHashMap和TreeMap底层实现。