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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构 - 红黑树

發(fā)布時間:2024/2/28 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构 - 红黑树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)結(jié)構(gòu) - 紅黑樹 - 面試常問知識點

數(shù)據(jù)結(jié)構(gòu)是面試中必定考查的知識點,面試者需要掌握幾種經(jīng)典的數(shù)據(jù)結(jié)構(gòu):線性表(數(shù)組、鏈表)、棧與隊列(二叉樹、二叉查找樹、平衡二叉樹、紅黑樹)、

本文主要介紹中的常見的紅黑樹數(shù)據(jù)結(jié)構(gòu)。包括

  • 簡介
  • 應(yīng)用
  • 左旋和右旋

簡介

R-B Tree,全稱是Red-Black Tree,又稱為“紅黑樹”,它一種特殊的二叉查找樹。紅黑樹的每個節(jié)點上都有存儲位表示節(jié)點的顏色,可以是紅(Red)或黑(Black)。

紅黑樹的性質(zhì):

  • (1). 每個節(jié)點或者是黑色,或者是紅色。
  • (2). 根節(jié)點是黑色。
  • (3). 每個葉子節(jié)點(NIL)是黑色。 [注意:這里葉子節(jié)點,是指為空(NIL或NULL)的葉子節(jié)點!]
  • (4). 如果一個節(jié)點是紅色的,則它的子節(jié)點必須是黑色的。
  • (5). 從一個節(jié)點到該節(jié)點的子孫節(jié)點的所有路徑上包含相同數(shù)目的黑節(jié)點。
  • (6). 一棵含有n個節(jié)點的紅黑樹的高度至多為2log(n+1)
  • (7). 紅黑樹的時間復(fù)雜度為: O(logn)

注意:

  • 特性(3)中的葉子節(jié)點,是只為空(NIL或null)的節(jié)點。
  • 特性(5)確保沒有一條路徑會比其他路徑長出倆倍。因而,紅黑樹是相對是接近平衡的二叉樹。

紅黑樹示意圖如下:


紅黑樹的引用

紅黑樹的應(yīng)用比較廣泛,主要是用它來存儲有序的數(shù)據(jù),它的時間復(fù)雜度是O(logn),效率非常之高。

例如,Java集合中的TreeSetTreeMap,C++ STL中的set、map,以及Linux虛擬內(nèi)存的管理,都是通過紅黑樹去實現(xiàn)的。


左旋和右旋

紅黑樹的基本操作是添加、刪除。在對紅黑樹進行添加或刪除之后,都會用到旋轉(zhuǎn)方法。為什么呢?
道理很簡單,添加或刪除紅黑樹中的節(jié)點之后,紅黑樹就發(fā)生了變化,可能不滿足紅黑樹的5條性質(zhì),也就不再是一顆紅黑樹了,而是一顆普通的樹。
而通過旋轉(zhuǎn),可以使這顆樹重新成為紅黑樹。簡單點說,旋轉(zhuǎn)的目的是讓樹保持紅黑樹的特性。
旋轉(zhuǎn)包括兩種:左旋右旋。下面分別對它們進行介紹。

1. 左旋

對x進行左旋,意味著”將x變成一個左節(jié)點”。


2. 右旋

對Y進行右旋,意味著”將Y變成一個右節(jié)點”。


仔細觀察上面”左旋”和”右旋”的示意圖。我們能清晰的發(fā)現(xiàn),它們是對稱的。無論是左旋還是右旋,被旋轉(zhuǎn)的樹,在旋轉(zhuǎn)前是二叉查找樹,并且旋轉(zhuǎn)之后仍然是一顆二叉查找樹。

總結(jié)

以上是生活随笔為你收集整理的数据结构 - 红黑树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。