成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

有了二叉查找樹、平衡樹為啥還需要紅黑樹?

開發 前端
紅黑樹算是很難的一種數據結構吧,一般很少考察插入、刪除等具體操作步驟,如果遇到要你手寫紅黑樹的面試官,就直接告辭吧。

 紅黑樹算是很難的一種數據結構吧,一般很少考察插入、刪除等具體操作步驟,如果遇到要你手寫紅黑樹的面試官,就直接告辭吧。所以,更多是會考察你對紅黑樹的理解程度,考察的最多的估計就是為什么有了二查找查找樹/平衡樹還需要紅黑樹這個問題了,今天,你只需要花一分鐘的時間,就知道怎么回答這個問題了。

[[324871]]

1、二叉查找樹的缺點

二叉查找樹,相信大家都接觸過,二叉查找樹的特點就是左子樹的節點值比父親節點小,而右子樹的節點值比父親節點大,如圖

 

騰訊的一道面試題:有了二叉查找樹、平衡樹為啥還需要紅黑樹?

 

基于二叉查找樹的這種特點,我們在查找某個節點的時候,可以采取類似于二分查找的思想,快速找到某個節點。n 個節點的二叉查找樹,正常的情況下,查找的時間復雜度為 O(logn)。

之所以說是正常情況下,是因為二叉查找樹有可能出現一種極端的情況,例如

 

騰訊的一道面試題:有了二叉查找樹、平衡樹為啥還需要紅黑樹?

 

這種情況也是滿足二叉查找樹的條件,然而,此時的二叉查找樹已經近似退化為一條鏈表,這樣的二叉查找樹的查找時間復雜度頓時變成了 O(n),可想而知,我們必須不能讓這種情況發生,為了解決這個問題,于是我們引申出了平衡二叉樹。

2、平衡二叉樹

平衡二叉樹就是為了解決二叉查找樹退化成一顆鏈表而誕生了,平衡樹具有如下特點

  • 具有二叉查找樹的全部特性。
  • 每個節點的左子樹和右子樹的高度差至多等于1。

例如:圖一就是一顆平衡樹了,而圖二則不是(節點右邊標的是這個節點的高度)

 

騰訊的一道面試題:有了二叉查找樹、平衡樹為啥還需要紅黑樹?

 

 

騰訊的一道面試題:有了二叉查找樹、平衡樹為啥還需要紅黑樹?

 

對于圖二,因為節點9的左孩子高度為2,而右孩子高度為0。他們之間的差值超過1了。

平衡樹基于這種特點就可以保證不會出現大量節點偏向于一邊的情況了。關于平衡樹如何構建、插入、刪除、左旋、右旋等操作這里不在說明.

于是,通過平衡樹,我們解決了二叉查找樹的缺點。對于有 n 個節點的平衡樹,最壞的查找時間復雜度也為 O(logn)。

3、為什么有了平衡樹還需要紅黑樹?

雖然平衡樹解決了二叉查找樹退化為近似鏈表的缺點,能夠把查找時間控制在 O(logn),不過卻不是最佳的,因為平衡樹要求每個節點的左子樹和右子樹的高度差至多等于1,這個要求實在是太嚴了,導致每次進行插入/刪除節點的時候,幾乎都會破壞平衡樹的第二個規則,進而我們都需要通過左旋和右旋來進行調整,使之再次成為一顆符合要求的平衡樹。

顯然,如果在那種插入、刪除很頻繁的場景中,平衡樹需要頻繁著進行調整,這會使平衡樹的性能大打折扣,為了解決這個問題,于是有了紅黑樹,紅黑樹具有如下特點:

  • 具有二叉查找樹的特點。
  • 根節點是黑色的;
  • 每個葉子節點都是黑色的空節點(NIL),也就是說,葉子節點不存數據。
  • 任何相鄰的節點都不能同時為紅色,也就是說,紅色節點是被黑色節點隔開的。
  • 每個節點,從該節點到達其可達的葉子節點是所有路徑,都包含相同數目的黑色節點。

例如下面的圖片(注意,圖片中黑色的、空的葉子節點沒有畫出)(圖片來自極客時間)

 

騰訊的一道面試題:有了二叉查找樹、平衡樹為啥還需要紅黑樹?

 

正是由于紅黑樹的這種特點,使得它能夠在最壞情況下,也能在 O(logn) 的時間復雜度查找到某個節點。至于為什么就能夠保證時間復雜度為 O(logn),我這里就不細講了,后面的文章可能會講。

不過,與平衡樹不同的是,紅黑樹在插入、刪除等操作,不會像平衡樹那樣,頻繁著破壞紅黑樹的規則,所以不需要頻繁著調整,這也是我們為什么大多數情況下使用紅黑樹的原因。

不過,如果你要說,單單在查找方面的效率的話,平衡樹比紅黑樹快。

所以,我們也可以說,紅黑樹是一種不大嚴格的平衡樹。也可以說是一個折中發方案。

如果我上面講的,你都懂,都能夠在面試中說出來,應該是足夠的了。我當時就是這么回答的。

4、總結

所以,最后的答案是,平衡樹是為了解決二叉查找樹退化為鏈表的情況,而紅黑樹是為了解決平衡樹在插入、刪除等操作需要頻繁調整的情況。

不過,紅黑樹還有挺多其他的知識點可以考,例如紅黑樹有哪些應用場景?向集合容器中 HashMap,TreeMap 等,內部結構就用到了紅黑樹了。還有構建一棵節點個數為 n 的紅黑樹,時間復雜度是多少?紅黑樹與哈希表在不同應該場景的選擇?紅黑樹有哪些性質?紅黑樹各種操作的時間復雜度是多少?

如果你把這些都弄懂了,應該就差不多可以的了,后面有時間的話,我給大家詳細講一下這些題,這里最好是要求理解,而不是死記硬背。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-08-29 08:31:13

B+樹數據索引

2021-10-09 18:26:59

二叉樹多叉樹搜索

2021-09-29 10:19:00

算法平衡二叉樹

2024-11-26 07:37:22

2020-03-11 08:40:51

紅黑樹平衡二叉B樹

2020-04-27 07:05:58

二叉樹左子樹右子樹

2022-10-12 23:25:17

二叉樹父節點根節點

2023-01-31 17:24:21

DPUCPUGPU

2020-09-17 07:37:09

紅黑樹數據結構

2020-08-12 07:44:57

存儲結構

2020-09-23 18:25:40

算法二叉樹多叉樹

2020-02-14 12:07:33

數據結構二叉查找樹查詢

2023-05-08 15:57:16

二叉樹數據結構

2012-04-09 16:22:43

C#

2013-07-15 16:35:55

二叉樹迭代器

2021-03-17 08:19:22

二叉樹LeetCode

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-04-20 08:37:14

數據結構二叉樹

2022-12-26 00:51:33

雙向鏈表二叉搜索樹

2021-04-28 20:12:27

數據結構創建
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美一区二区三区在线看蜜臀 | 久久青 | 久久精品播放 | 狠狠干天天干 | 日韩av在线一区二区三区 | 狠狠干狠狠操 | 久久成人精品视频 | 色综合美女 | 成人18亚洲xxoo | 亚洲一卡二卡 | 久久久久亚洲精品 | 日韩一区二区三区视频 | 亚洲日韩欧美一区二区在线 | 性欧美hd| 一区2区 | 欧美视频在线看 | 在线观看成年人视频 | 亚洲精品9999 | 免费看国产一级特黄aaaa大片 | 91精品久久久久久久 | 亚洲成人在线网 | 亚洲精品电影在线观看 | av网站免费观看 | 婷婷久久综合 | 99精品免费久久久久久久久日本 | 国产亚洲精品美女久久久久久久久久 | 日日噜噜噜夜夜爽爽狠狠视频, | 精品日韩一区 | 国产99视频精品免视看9 | 成人片免费看 | 中文字幕亚洲区 | 国产97在线视频 | 在线欧美一区二区 | 欧美性猛片aaaaaaa做受 | 亚洲成人免费视频 | 亚洲性视频网站 | 懂色中文一区二区在线播放 | 精品国产区 | 日韩午夜精品 | 免费一级做a爰片久久毛片潮喷 | 米奇7777狠狠狠狠视频 |