要理解紅黑樹就要先理解二叉查找樹面試
二叉查找樹特徵:segmentfault
1.左子樹上全部結點的值均小於或等於它的根結點的值。性能
2.右子樹上全部結點的值均大於或等於它的根結點的值。blog
3.左、右子樹也分別爲二叉排序樹。排序
二叉查找樹的優勢:查找所需數的最大次數爲等同於二叉查找樹的高度。插入的時候也是相似,經過一層層比較大小,找到適合插入的位置。class
二叉查找樹的缺點:jdk
如圖,原始只有三個點,當插入5,6,7以後就會致使查找的性能下降,幾乎變成線性im
而紅黑樹正是爲了解決二叉查找樹屢次插入新節點而致使的不平衡img
紅黑樹:是一種自平衡的二叉查找樹。除了符合二叉查找樹的基本特徵外還有以下特性。(紅黑樹從根到葉子的最長路徑不超過最短路徑的兩倍)紅黑樹
1.節點是紅色或黑色。
2.根節點是黑色。(記)
3.每一個葉子節點都是黑色的空節點。(記)
4 每一個紅色節點的兩個子節點都是黑色。(就是不能有連續的紅色)(記)
5.從任一節點到其每一個葉子的全部路徑都包含相同數目的黑色節點。(記)
下圖中這棵樹,就是一顆典型的紅黑樹:
紅黑樹的特性和優點,及在什麼狀況下須要變色什麼狀況下須要旋轉
面試問題:
一.紅黑樹有哪些性質?
1.節點是紅色或黑色。
2.根節點是黑色。
3.每一個葉子節點都是黑色的空節點。
4 每一個紅色節點的兩個子節點都是黑色。(就是不能有連續的紅色)
5.從任一節點到其每一個葉子的全部路徑都包含相同數目的黑色節點。
2.紅黑樹的各類操做的時間複雜度是多少?
能保證在最壞狀況下,基本的動態幾何操做的時間均爲O(lgn)
3.紅黑樹的應用:
應用有不少,jdk的集合類TreeMap和TreeSet底層就是紅黑樹實現的。Jdk8中HashMap也用到了紅黑樹。
想要理解清楚:https://segmentfault.com/a/1190000014037447?utm_source=tag-newest