【演算法】java版紅黑樹演算法的完整實現及swing介面演示程式
【前言】
當初因為覺得資料結構及演算法是碼農的基礎(正如鋤頭對農民一樣)才決定話費時間來補習的,但是真正自行實現演算法及演算法的視覺化演示的時候才發現難度是如此之大。
演算法寫起來慢,swing介面寫起來也慢。
紅黑樹的結構最重要就是幾個規則:
1、根節點為黑色,NIL(空節點,葉節點,每一條路徑最後必然會有一個葉節點作為結尾)節點為黑色。
2、紅色節點不能相鄰,從根節點到每一個葉節點的黑色節點數目相同。
紅黑樹的插入操作:請檢視上一篇文章,尤其是我直接放出來的兩種插入方式,看懂了那你就不會出問題了。
紅黑樹的刪除操作:請對照上一篇文章的介紹,容易出錯的地方我也用紅字補充了。但是,這部分相對插入操作而言要繁瑣很多,主要是需要判斷的情形都有六種了,每一種都有相關操作方式,在這裡我花費3天時間對照規則,編寫程式,除錯程式,
不得不說bug是程式設計師的宿命。
【程式演示及下載】
步驟一:填充演示用的資料(演示用的資料我拿了july那篇文章的部分資料,反正都是為了demo):
【下面進行操作操作】
【插入主鍵9.8】
【插入主鍵9.9】
【插入主鍵10.8】
【插入主鍵9.7】
【插入主鍵9.6】
【插入主鍵9.5】
【插入主鍵9.65】
【插入主鍵9.68】----由於我採用了簡陋的畫圖演算法,它不會按照最合適的尺寸定位,只按照最大範圍,所以看不全,沒關係,我分成兩部分了。
【沒必要再插下去了,因為插入的都是按照那幾種情形來處理,下面演示刪除操作】
【刪除主鍵9.8】
【刪除主鍵9.65】
【刪除主鍵9.0】
【刪除主鍵9.5】
【刪除主鍵0.0】
【刪除主鍵12.0】
【刪除主鍵15.0】
【刪除主鍵11】
【刪除主鍵4.0】
【刪除主鍵2.0】
【刪除主鍵7.0】
【刪除主鍵1.0】
想必每一位在學習紅黑樹的同學們都或多或少會有疑惑吧?只要堅持看,堅持寫,那麼就會做出來的,下面我將演示程式打包放出來:
下一篇文章將把紅黑樹的核心實現程式碼放出來。