zoukankan      html  css  js  c++  java
  • ZZ 红黑树,并非想象中的那么复杂



    把一年前写的红黑树一章重新写了一遍。红黑树是非常popular的一种self-adjusted的平衡二叉排序树。

    通常他给我们的印象是很复杂,有很多case,要小心的旋转。TL上曾经有人说,在某公司的面试时,被要求实现红黑树。他觉得这很没有道理,几乎很少有
    人能在不参考教科书的情况下,记清楚那么多的case。

    在这一章里,我将向你展示目前我所见过的最简洁的红黑树实现。简洁到什么程度呢?我打赌你看过后能轻松通过上面的面试——Wow, 红黑树原来可以这么
    简单!

    这个实现,来自Chris Okasaki在卡耐基梅隆大学(CMU)的博士研究成果。他启发我用同样的方法简洁地实现了AVL tree和
    Splay tree。

    这一章我们讲红黑树,大致内容如下:
      1. 简介——我们看看普通的排序二叉树致命弱点,并且给出树旋转的概念;
      2. 红黑树的定义——我们看看为什么红黑树的性质能解决平衡问题,从而胜过排序二叉树;
      3. 插入——我们给出红黑树插入算法的数学定义,这里是本章的精华;
      4. 删除——删除本来不是个问题,但是我们要展示下删除比起插入有多复杂;
      6. 传统实现——我们看看传统实现的红黑树插入算法有多复杂,并做进一步的比较分析;传统实现的删除算法我们留作练习。
      7. 其他——多说两句

    全文在
    https://sites.google.com/site/algoxy/rbtree

    由于google site国内访问不到,所以我放了一份在iteye的附件里。
    http://liuxinyu95.iteye.com/blog/1068508

    全部源代码在github可以获得:
    https://github.com/liuxinyu95/AlgoXY

    
  • 相关阅读:
    2020软件工程02
    自我介绍
    2019年春总结作业
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    第七周学习总结
    第六周学习总结
  • 原文地址:https://www.cnblogs.com/cutepig/p/2071252.html
Copyright © 2011-2022 走看看