zoukankan      html  css  js  c++  java
  • 六、二叉树和红黑树

    一、二叉查找/搜索/排序树BST (binary search/sort tree)

      或者是一棵空树;

      或者是具有下列性质的二叉树:

    • 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;
    • 若它的右子树上所有结点的值均大于它的根节点的值;
    • 它的左、右子树也分别为二叉排序树。

     二、平衡二叉树(AVL 树)(有别于AVL 算法)

      它是一棵空树

      或它的左右两个子树的高度差( 平衡因子)的绝对值不超过1

      平衡二叉树: 每个结点的平衡因子都为1、-1、0 的二叉排序树。或者说每个结点的左右子树的高度最多差1 的二叉排序树。

      平衡二叉树的目的是为了减少二叉查找树层次,提高查找速度

    三、红黑树

     R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种平衡二叉树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。

    红黑树的特性:

    1. 每个节点或者是黑色,或者是红色。
    2. 根节点是黑色。
    3. 每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
    4. 如果一个节点是红色的,则它的子节点必须是黑色的。
    5. 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

    注意:

    • 特性(3)中的叶子节点,是只为空(NIL或null)的节点。
    • 特性(5),确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树

    四、红黑树和平衡二叉树

    红黑树并不是真正的平衡二叉树,但在实际应用中,红黑树的统计性能要高于平衡二叉树,但极端性能略差。

    由此我们可以得出结论:对于给定的黑色高度为 N 的红黑树,从根到叶子节点的最短路径长度为 N-1,最长路径长度为 2 * (N-1)。

    提示:排序二叉树的深度直接影响了检索的性能,当插入节点本身就是由小到大排列时,排序二叉树将变成一个链表,这种排序二叉树的检索性能最低:N 个节点的二叉树深度就是 N-1。

    红黑树通过上面这种限制来保证它大致是平衡的——因为红黑树的高度不会无限增高,这样保证红黑树在最坏情况下都是高效的,不会出现普通排序二叉树的情况。

    由于红黑树只是一个特殊的排序二叉树,因此对红黑树上的只读操作与普通排序二叉树上的只读操作完全相同,只是红黑树保持了大致平衡,因此检索性能比排序二叉树要好很多。

    但在红黑树上进行插入操作和删除操作会导致树不再符合红黑树的特征,因此插入操作和删除操作都需要进行一定的维护,以保证插入节点、删除节点后的树依然是红黑树

  • 相关阅读:
    【PHP】最详细PHP从入门到精通(二)——PHP中的函数
    利用 MUI开发app, 如何实现侧滑菜单及其主体部分上下滑动
    JavaScript面向对象编程—this详解
    利用Hadoop streaming 进行词频统计
    Java 平时作业七
    Java 平时作业六
    Java 平时作业五
    Java 平时作业四
    Java 平时作业三
    JAVA 平时作业二
  • 原文地址:https://www.cnblogs.com/qiaoxin11/p/12828001.html
Copyright © 2011-2022 走看看