zoukankan      html  css  js  c++  java
  • 红黑树和AVL树(平衡二叉树)区别

    一、AVL树(平衡二叉树)

    (1)简介

    AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树高度差不超过1,和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有结点的左右子树高度差不超过1)。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保存平衡,而因为旋转非常耗时,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况

    (2)局限性

    由于维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不多,更多的地方是用追求局部而不是非常严格整体平衡的红黑树。当然,如果应用场景中对插入删除不频繁,只是对查找要求较高,那么AVL还是较优于红黑树。

    (3)应用

    1.Windows NI内核中广泛存在;

    二、红黑树

    (1)简介

    一种二叉查找树,但在每个节点增加一个存储位表示结点的颜色,可以是红或黑(非红即黑)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因此,红黑树是一中弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树),相对于要求严格的AVL树来说,它的旋转次数少,插入最多两次旋转,删除最多三次旋转,所以对于搜索,插入,删除操作较多的情况下,我们就用红黑树。

    (2)性质

    (1)结点非红即黑

    (2)根结点是黑色的

    (3)每个叶子节点(NULL节点)是黑色的

    (4)每个红色节点的两个子节点都是黑色的。(不能有两连续的红色节点)

    (5)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

    注意:性质(5)保证红黑树的最长路径不超过最短路径的两倍。

    (3)应用

    1、广泛应用于C++的STL中,map和set底层都是用红黑树实现的。

  • 相关阅读:
    【iOS学习笔记】iOS启动顺序
    【iOS学习笔记】iOS算法(四)之冒泡排序
    【iOS学习笔记】iOS算法(五)之折半查找
    【iOS学习笔记】iOS算法(三)之插入排序
    【iOS学习笔记】iOS算法(二)之选择排序
    【iOS学习笔记】iOS算法(一)快速排序算法
    【iOS学习笔记】iOS ⾃自定义cell的步骤
    【iOS学习笔记】IOS开发中设置applicationIconBadgeNumber和消息推送
    【iOS学习笔记】iOS 9:改用更安全的HTTPS
    2015/10/6 iOS 笔记 细节 应用中常见文件
  • 原文地址:https://www.cnblogs.com/deepalley/p/13447970.html
Copyright © 2011-2022 走看看