日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试让你手撕红黑树?30张图带你彻底理解红黑树~

發布時間:2024/10/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试让你手撕红黑树?30张图带你彻底理解红黑树~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看完本篇文章希望你能解決以下問題,文章稍長,希望你耐心看完!

  • 紅黑樹也有自旋操作,為什么會比AVL要性能好呢(或者說穩定呢)?
  • 紅黑樹的平衡調整策略?
  • 看完能不能手撕紅黑樹?

1.先來復習復習AVL樹

平衡二叉樹有很多,最先被發明的平衡二叉樹是AVL,是一種高度平衡的二叉查找樹;為什么會引入AVL呢?它有什么特別之處呢?

普通的二叉搜索樹的時間復雜度在O(logn) ~ O(n),在頻繁進行插入、刪除可能會出現復雜度退化的情形;也就是在極端情況下,二叉樹搜索樹退化成了鏈表

普通的二叉搜索的兩種極端情況如下圖:


如果是你,你認為應該怎么解決如上問題呢?
其實最核心的一點就是“平衡”,也就是希望節點兩邊盡可能地保持一致,這樣就能保證我們地時間復雜度處于O(logn),因此AVL樹幫我們解決了這一個問題。

在AVL樹中,任意一個節點的左右子樹的高度差的絕對值不會大于1,這是AVL樹達到平衡核心性質;雖然AVL樹解決了一邊倒的情形,但是AVL平衡調整時的左旋和右旋也消耗了一定的性能,所以AVL樹應用也不是很廣泛。

  • 有關AVL樹我就不再過多敘述,本章的重點是紅黑樹。

2.探討紅黑樹的魅力

在源碼學習過程中,更是到處都是紅黑樹的影子!!!

紅黑樹相對于普通的二叉搜索樹稍微難了點,那它難在哪呢?主要是在插入和刪除時可能會破壞樹的平衡性,所以需要進行自適應調整重新達到平衡狀態。其實耐下心來看完,發現紅黑樹也就是那么回事。紅黑樹是必須要掌握的點,往遠了說紅黑樹使用非常廣泛,往近了說很多map類的源碼中都用到了紅黑樹。

先來看紅黑樹的性質(本質上和2-3樹具有等價性想了解的同學可以取看看,對了解B樹也有幫助)。

  • 1.根節點必須是黑色
  • 2.節點非黑即紅
  • 3.葉子節點是黑色(這個是虛擬節點nil,實際上不存在,就是那個最后一個節點的left和right指向的空)
  • 4.兩個紅色節點不能相連
  • 5.根節點到葉子節點,黑色節點數目相同

通過以上的性質你能看出來什么特點沒?

  • (1)注定了紅黑樹中最長路徑是最短路徑的兩倍

  • (2)紅黑樹通過樹高來控制平衡,也就是(1)所講的

回到剛開始開頭問的問題,為什么紅黑樹要比AVL更加廣泛具有代表性?

紅黑樹比AVL樹的平衡控制條件更加松散;AVL要求左右樹差的絕對值必須小于1,這就導致了AVL樹在插入和刪除之后發生調整的概率要比紅黑樹要大,而自旋操作又是比較浪費性能的,所以也就導致了控制條件較為松散的紅黑樹比較吃香。

有的人會問了那控制條件能不能更松散些呢?

需要考慮查詢效率和消耗的性能,再松散直接使用鏈表得嘞。


飛速手撕紅黑樹中…

總結

以上是生活随笔為你收集整理的面试让你手撕红黑树?30张图带你彻底理解红黑树~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。