紅黑樹——面試相關


1. 簡單的介紹下紅黑樹?

  a. 紅黑樹是一種平衡二叉查找樹(簡稱平衡樹,常見的平衡樹有AVL,紅黑樹。AVL樹的性質為:每個結點的左右子樹的高度之差的絕對值最多為1。

    //add: 如果再問你什么是平衡樹,回答:最大深度不大於log(n),n是樹的節點個數。

  b. Java集合中的TreeSetTreeMapC++ STL中的set、map,以及Linux虛擬內存的管理,都是通過紅黑樹去實現的。

     //add1:為啥TreeSet和TreeMap不用其他平衡樹,比如AVL? 答:雖然紅黑樹操作的復雜度和AVL是相同的,但是紅黑樹從不平衡調整到平衡所需操作更少,統計性能更優。

     //add2:TreeSet和HashSet的比較? 

    答:1) TreeSet是用紅黑樹實現的,操作復雜度O(log(n)),HashSet使用哈希+拉鏈去沖突法實現的,平均操作復雜度O(1)。所以一般查找HashSet更快。

      2) TreeSet因為是紅黑樹,本質是一顆二叉排序樹,所以元素是排好序的。同時也需要使用Comparator接口,實現 compare方法。(不寫的話會使用默認的,沒有默認就會拋異常)

        HashSet則需要重寫該對象對應類的equals方法和hashCode()方法(不寫的話也會使用默認的)。

      3) HashSet可以放入null,但只能放入一個null。TreeSet不能放入null。(TreeSet需要排序,你怎么和一個null比較大小)

 

     c. 紅黑樹的各項操作(插入、刪除、查找等)復雜度都為log(n)

  d. 紅黑樹的五大特征

    1)節點要么為紅色,要么為黑色。(不然為啥叫紅黑樹;))

    2)根節點為黑色。

    3)葉子節點為黑色。 (這兩個簡直送分,最上面和最下面都是黑的)

    4)每個紅色節點的左右孩子都是黑色。 (保證了從根節點到葉子節點不會出現連續兩個紅色節點)

    5)從任意節點到其每個葉子節點的所有路徑,都包含相同數目的黑色節點。(4,5是使得紅黑樹為平衡樹的關鍵)

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM