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底层实现。

 

posted @ 2020-07-28 22:05  如幻行云  阅读(338)  评论(0编辑  收藏  举报