一、二叉搜索樹數組
(1)二叉查找樹性能
左子樹不爲空的話,左子樹的全部結點都小於它的根結點的值,右子樹不爲空的話,右子樹的全部結點都大於它的根結點3d
查找的值比當前結點值大,則搜索右子樹,反之,搜索左子樹blog
插入的時候也要從根節點開始比較,直到左子樹爲空或右子樹爲空效率
中序遍歷元素的大小是有順序的(從小到大)二叉樹
刪除的時候分爲沒有子結點的結點、有一個子結點的結點、有兩個子結點的結點,搜索
(2)二叉搜索樹時間複雜度遍歷
數據源必須是有序數組,一次迭代查詢能夠清除掉一半的元素im
(3)缺陷鏈表
強制依賴有序數組,才能保證性能
最大的缺陷是二叉搜索樹退化爲鏈表:效率低,達不到排除一半元素的效果
二、AVL樹
(1)特色
具備二分查找樹的全部特性
每個結點的左子樹與右子樹的高度差至多等於1
保證不會出現大量的結點偏向於一邊的狀況(插入或刪除的時候,左旋與右旋操做,使得樹再次左右保持平衡)
雖然平衡樹解決了二叉查找樹退化爲近似鏈表的缺點,可以把查找時間控制在O(logn),不過卻不是最佳的, 由於平衡樹要求每一個節點的左子樹和右子樹的高度差至多等於1,這個要求實在是太嚴,致使每次進行插入刪除節點的時候, 幾乎都會破壞平衡樹的第二個規則,進而咱們都須要經過左旋和右旋來進行調整,使之再次成爲一棵符合要求的平衡樹 顯然,若是在那種插入、刪除很頻繁的場景中,平衡樹須要頻繁着進行調整,這會使平衡樹的性能大打折扣,爲了解決這個問題,因而有了紅黑樹! ! !
三、紅黑樹
(1)定義
紅黑樹是一種含有紅黑結點並可以自平衡的二叉查找樹(左結點的小於父結點,右節點大於父結點),本質是爲了解決二叉搜索樹的平衡問題
二叉查找樹是一棵非平衡的樹:在下面的例子中二叉樹退化成了鏈表結構
(2)性質
每個結點要麼是黑色要麼是紅色
根結點、葉子結點(NIL)是黑色
每一個紅色結點的兩個子結點必定是黑色(不能有兩個紅色結點)
任意一個結點到每個葉子結點的路徑都包含相同的黑色結點
四、紅黑樹的自平衡性
紅黑樹的自平衡包括:變色和旋轉(左旋與右旋,順時針爲右旋),旋轉要有圓心,有方向,旋轉結點圍繞子結點旋轉(子結點爲圓心)
(1)左旋
(2)右旋
(3)查找
從P開始查找,大於P的話向左查找,在與G比較... ...
(4)增長
三個點之間的關係:
CPG(當前、父、祖父)三點一線:
CPG三角:
三個點要麼是三角關係要麼是三點一線關係。
增長: