Ⅰ 什麼是紅黑樹
紅黑樹的性質:
1.每個節點非黑即紅
2.根節點是黑色的
3.空的葉節點都是黑色的
4.如果一個節點是紅色的,那麼它的父節點和子節點就只能是黑色的,也就是不能有連續的紅色節點。
5.任意節點到它後代的葉節點的所有路徑上,擁有相同數量的黑色節點。
Ⅱ 紅黑樹比AVL樹具體更高效在哪裡
優化了我的avl實現,AVL插入和刪除並不像教科書上說的,需要回溯到根節點,兩種情況下可以直接退出向上回溯:
插入更新時:如果當前節點的高度沒有改變,則停止向上回溯父節點。
刪除更新時:如果當前節點的高度沒有改變,且平衡值在[-1,1]區間則停止回溯。
最終結論,優化過的avl和linux的rbtree放在一起,avl真的和rbtree差不多,avl也並不總需要回溯到根節點,雖然旋轉次數多於rbtree,但是rbtree保持平衡除了旋轉外還有重新著色的操作,即便不旋轉也在拚命的重新著色,且層數較高,1百萬個節點的rbtree層數和1千萬個節點的avl相同。
所以查詢,刪除,插入全部放在一起來看,avl樹和rbtree差不多。
紅黑樹屬於平衡二叉樹。
說它不嚴格是因為它不是嚴格控制左、右子樹高度或節點數之差小於等於1。
但紅黑樹高度依然是平均log(n),且最壞情況高度不會超過2log(n),這有數學證明。所以它算平衡樹,只是不嚴格。不過嚴格與否並不影響數據結構的復雜度。
不用嚴格控制高度,使得插入效率更高。
1.查找
顯然,avl樹要比紅黑樹更平衡,因此avl樹的查找效率更高。
2.插入
不論是avl樹還是紅黑樹,旋轉的時間復雜度都是O(1)
對於avl樹,旋轉的時候,需要找到第一個不平衡節點,這就需要我們維護一個平衡因子,每一次插入,旋轉,刪除等操作,都要更新從跟節點到被修改節點這個路徑上的平衡因子。。。最差情況下,需要O(logn)的時間復雜度。。。
Ⅲ 紅黑樹的用途
紅黑樹用在關聯數組、字典的實現上。需要的空間比散列表小。 任何鍵值對應,需要隨機存儲和鍵有序的情況都可以用。
Ⅳ 紅黑樹,,,,
不可能,紅黑樹引入了NIL節點,故一定會有兩個黑色孩子,如果不考慮NIL節點的話是可能的。
Ⅳ 紅黑樹的介紹
紅黑樹(Red Black Tree) 是一種自平衡二叉查找樹,是在計算機科學中用到的一種數據結構,典型的用途是實現關聯數組。它是在1972年由Rudolf Bayer發明的,當時被稱為平衡二叉B樹(symmetric binary B-trees)。後來,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改為如今的「紅黑樹」。紅黑樹和AVL樹類似,都是在進行插入和刪除操作時通過特定操作保持二叉查找樹的平衡,從而獲得較高的查找性能。它雖然是復雜的,但它的最壞情況運行時間也是非常良好的,並且在實踐中是高效的: 它可以在O(log n)時間內做查找,插入和刪除,這里的n 是樹中元素的數目。
Ⅵ 紅黑樹是怎麼回事百度的解釋,我看不懂。誰能給解釋一下紅黑樹的設計思想和這種思想誕生的原因,對應的
http://blog.163.com/scn_2001_ren/blog/static/69845881200872410163654/
Ⅶ 紅黑樹比起AVL樹具體更高效在什麼地方呢
優化了我的avl實現,AVL插入和刪除並不像教科書上說的,需要回溯到根節點,兩種情況下可以直接退出向上回溯:
插入更新時:如果當前節點的高度沒有改變,則停止向上回溯父節點。
刪除更新時:如果當前節點的高度沒有改變,且平衡值在[-1,1]區間則停止回溯。
最終結論,優化過的avl和linux的rbtree放在一起,avl真的和rbtree差不多,avl也並不總需要回溯到根節點,雖然旋轉次數多於rbtree,但是rbtree保持平衡除了旋轉外還有重新著色的操作,即便不旋轉也在拚命的重新著色,且層數較高,1百萬個節點的rbtree層數和1千萬個節點的avl相同。
所以查詢,刪除,插入全部放在一起來看,avl樹和rbtree差不多。
紅黑樹屬於平衡二叉樹。
說它不嚴格是因為它不是嚴格控制左、右子樹高度或節點數之差小於等於1。
但紅黑樹高度依然是平均log(n),且最壞情況高度不會超過2log(n),這有數學證明。所以它算平衡樹,只是不嚴格。不過嚴格與否並不影響數據結構的復雜度。
不用嚴格控制高度,使得插入效率更高。
1.查找
顯然,avl樹要比紅黑樹更平衡,因此avl樹的查找效率更高。
2.插入
不論是avl樹還是紅黑樹,旋轉的時間復雜度都是O(1)
對於avl樹,旋轉的時候,需要找到第一個不平衡節點,這就需要我們維護一個平衡因子,每一次插入,旋轉,刪除等操作,都要更新從跟節點到被修改節點這個路徑上的平衡因子。。。最差情況下,需要O(logn)的時間復雜度。。。
Ⅷ 紅黑樹的樹的旋轉
當我們在對紅黑樹進行插入和刪除等操作時,對樹做了修改,那麼可能會違背紅黑樹的性質。
為了保持紅黑樹的性質,我們可以通過對樹進行旋轉,即修改樹種某些結點的顏色及指針結構,以達到對紅黑樹進行插入、刪除結點等操作時,紅黑樹依然能保持它特有的性質(五點性質)。
如右圖。
Ⅸ 紅黑樹,b+樹分別用於什麼場景,為什麼
紅黑樹屬於「黑平衡」的二叉樹,雖然犧牲了一定的平衡性,但是add、remove操作要由優於AVL樹也就是說RB-Tree的「統計性能」更佳!Java中TreeSet,TreeMap的底層都是基於RedBlackTree紅黑樹的;
B+樹主要用在文件系統以及資料庫做索引。比如磁碟存儲、文件系統、MySQL資料庫