java中的數據結構平衡二叉樹和紅黑樹


平衡二叉樹是左邊子節點比父節點小,右邊子節點比父節點大,左節點深度和右節點深度相同,或者右節點深度跟左節點深度相差1,比較嚴苛,需要不斷的變化,使得二叉樹平衡,損壞性能CPU。

紅黑樹是相對寬松的平衡二叉樹,最差情況下,右節點深度跟左節點深度相差2倍,包含內容:
1,樹節點只有紅節點和黑節點
2,根節點必須是黑節點
3,葉子節點值即使是null,也必須是黑節點(意思是一半以上黑節點)
4,新插入的節點必須是紅節點
5,紅節點的子節點必須是黑節點
6,從任意一個節點出發到葉子節點的路徑上黑節點個數總和必須相同(假如全部是黑節點,就是節點數相同,最差情況下,假如一邊是黑節點,沒有紅節點,而另一邊有紅節點和黑節點,因為紅節點子節點必須是黑節點,所以他們交替出現,因為葉子節點必須是黑節點,所以一邊是5個節點,另一邊是10個節點,他們相差一半)

 

 上圖是紅黑樹操作規則:

1,其中類型表示當前節點是怎么從祖父節點搜索到父節點,再從父節點搜索到孫子節點,可能父節點是在祖父節點的右邊,孫子節點又是父節點的右子節點,所以是右右類型,假如孫子節點是父節點的左邊子節點,就是右左類型,假如祖父節點的子節點是左邊子節點,孫子節點是父節點的左子節點,則是左左類型,如果孫子節點是父節點的右子節點,則是左右類型。

2,左旋表示以當前節點的父節點為支點,向左邊旋轉,這時父節點變為祖父節點,原來的祖父節點變為子節點,當前節點由原來的孫子節點變為子節點。比如a->b->c,左旋之后變為b->a,b->c。假如只有兩個節點a->b,左旋之后,原來的父節點變為子節點,子節點變為父節點。

 

鏈接:https://www.ixigua.com/i6835579764477002247/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM