AVL树和红黑树区别
二叉查找樹:
二叉查找樹就是左結點小于根節點,右結點大于根節點的一種排序樹,也叫二叉搜索樹。也叫BST。二叉查找樹比普通樹查找更快,查找、插入、刪除的時間復雜度為O(logN)。但是二叉查找樹有一種極端的情況,就是會變成一種線性鏈表似的結構。此時時間復雜度就變味了O(N)。(為了解決這種情況,出現了二叉平衡樹)
?
平衡二叉樹:
平衡二叉樹全稱平衡二叉搜索樹,也叫AVL樹。是一種自平衡的樹。
AVL樹也規定了左結點小于根節點,右結點大于根節點。并且還規定了左子樹和右子樹的高度差不得超過1。這樣保證了它不會成為線性的鏈表。AVL樹的查找穩定,查找、插入、刪除的時間復雜度都為O(logN),但是由于要維持自身的平衡,所以進行插入和刪除結點操作的時候,需要對結點進行頻繁的旋轉。
AVL樹每一個節點只能存放一個元素,并且每個節點只有兩個子節點。當進行查找時,就需要多次磁盤IO,(數據是存放在磁盤中的,每次查詢是將磁盤中的一頁數據加入內存,樹的每一層節點存放在一頁中,不同層數據存放在不同頁。)這樣如果需要多層查詢就需要多次磁盤IO。為了解決AVL樹的這個問題,就出現了B樹
為什么B類樹可以進行優化呢?我們可以根據B類樹的特點,構造一個多階的B類樹,然后在盡量多的在結點上存儲相關的信息,保證層數盡量的少,以便后面我們可以更快的找到信息,磁盤的I/O操作也少一些,而且B類樹是平衡樹,每個結點到葉子結點的高度都是相同,這也保證了每個查詢是穩定的。
?
紅黑樹:
紅黑樹也叫RB樹,RB-Tree。是一種自平衡的二叉查找樹,它的節點的顏色為紅色和黑色。它不嚴格控制左、右子樹高度或節點數之差小于等于1。也是一種解決二叉查找樹極端情況的數據結構。
?
紅黑樹規定了:
1.節點是紅色或黑色。
2.根節點是黑色。
3.每個葉子節點都是黑色的空節點(NIL節點)。
4?每個紅色節點的兩個子節點都是黑色。也就是說從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)。
5.從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
?
紅黑樹在查找方面和AVL樹操作幾乎相同。但是在插入和刪除操作上,AVL樹每次插入刪除會進行大量的平衡度計算,紅黑樹是犧牲了嚴格的高度平衡的優越條件為代價,它只要求部分地達到平衡要求,結合變色,降低了對旋轉的要求,從而提高了性能。紅黑樹能夠以O(log2 n)的時間復雜度進行搜索、插入、刪除操作。此外,由于它的設計,任何不平衡都會在三次旋轉之內解決。
相比于BST,因為紅黑樹可以能確保樹的最長路徑不大于兩倍的最短路徑的長度,所以可以看出它的查找效果是有最低保證的。在最壞的情況下也可以保證O(logN)的,這是要好于二叉查找樹的。因為二叉查找樹最壞情況可以讓查找達到O(N)。
紅黑樹的算法時間復雜度和AVL相同,但統計性能比AVL樹更高,所以在插入和刪除中所做的后期維護操作肯定會比紅黑樹要耗時好多,但是他們的查找效率都是O(logN),所以紅黑樹應用還是高于AVL樹的. 實際上插入 AVL 樹和紅黑樹的速度取決于你所插入的數據.如果你的數據分布較好,則比較宜于采用 AVL樹(例如隨機產生系列數),但是如果你想處理比較雜亂的情況,則紅黑樹是比較快的。
?
總結
以上是生活随笔為你收集整理的AVL树和红黑树区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++string类默认函数实现
- 下一篇: memcpy实现