红黑树模拟软件_红黑树
紅黑樹
發布時間:2018-08-10 15:12,
瀏覽次數:415
一、在理解紅黑樹之前,先看一些二叉查找樹
二叉查找樹特性:左字數上所有的節點的值都小于或等于他的根節點上的值
右子樹上所有節點的值均大于或等于他的根節點的值
左、右子樹也跟別為平衡二叉樹
舉個二叉樹的例子:
可以看到如果要查詢10的話,10>9
因此到他的右子樹,右子樹根節點為13,10<13
因此到其左子樹,左子樹根節點為11>10
到其左子樹,為10,找到相應的節點
不過二叉查找樹有一些問題,可能會出現不平橫的情況,即如下圖所示的情況
從這種情況可以看出,明顯存在左子樹和右子樹深度相差過多,在使用平衡情況下的二叉查找樹是時間復雜度為logn,而出現這種極端情況的話,想要查9的位置就需要每一次都遍歷下一個右子樹,很有可能時間復雜度變為n(與數組普通查詢的時間復雜度相同)
基于上述情況,引入了平衡二叉樹,紅黑樹即為平衡二叉樹的一種
二、紅黑樹
特性:節點是紅色或黑色
根節點一定是黑色
每個葉節點都是黑色的空節點(NIL節點)
每個紅節點的兩個子節點都是黑色的(從每個葉子到跟的所有路徑上不能有兩個連續的紅節點)(即對于層來說除了NIL節點,紅黑節點是交替的,第一層是黑節點那么其下一層肯定都是紅節點,反之一樣)
從任一節點到其每個葉子節點的所有路徑都包含相同數目的黑色節點
正是由于這些原因使得紅黑樹是一個平衡二叉樹
紅黑樹的例子
向紅黑樹中插入節點14(一般默認插入節點是紅色的)
在原樹上插入20
可以看到,插入以后樹已經不是一個平衡的二叉樹,而且并不滿足紅黑樹的要求,因為20和21均為紅色,這種情況下就需要對紅黑樹進行變色,21需要變為黑色,22就會變成紅色,如果22變成紅色,則需要17和25都變成黑色
而17變成黑色顯然是不成立的,因為如果17變為黑色,那么13就會變為紅色,不滿足二叉樹的規則,因此此處需要進行另一個操作---------左旋操作
左旋:下圖就是一個左旋的例子,一般情況下,如果左子樹深度過深,那么便需要進行左旋操作以保證左右子樹深度差變小
對于上圖由于右子樹中17變為黑色以后需要把13變成紅色,因此進行一次左旋,將17放在根節點,這樣既可保證13為紅色,左旋后結果
而后根據紅黑樹的要求進行顏色的修改
進行左旋后,發現從根節點17,到1左子樹的葉子節點經過了兩個黑節點,而到6的左葉子節點或者右葉子節點要經歷3個黑節點,很顯然也不滿足紅黑樹,因此還需要進行下一步操作,需要進行右旋操作
右旋:與左旋正好相反
由于是從13節點出現的不平衡,因此對13節點進行右旋,得到結果
而后再對其節點進行變色,得到結果
這便是紅黑樹的一個變換,它主要用途有很多,例如java中的TreeMap以及JDK1.8以后的HashMap在當個節點中鏈表長度大于8時都會用到。
總結
以上是生活随笔為你收集整理的红黑树模拟软件_红黑树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米机器人虚拟墙设置_扫地机器人虚拟墙应
- 下一篇: 机器人鸣人是哪一集_火影里的五个机器人,