1. 程式人生 > 其它 >樹之設計【AVL樹、紅黑樹的設計】

樹之設計【AVL樹、紅黑樹的設計】

樹之設計【AVL樹、紅黑樹的設計】

1,設計之初:

✿ 思考:AVL樹的意義:高度平衡二叉樹,用來維持整棵樹是一棵平衡的二叉樹,那麼在繼承父類【BST 二叉搜尋樹】基礎上,考慮啥時候 AVL需要調整平衡?

  --------------------------------------BST 二叉搜尋樹,進行插入(增加)結點之後的樹,可能失衡,需要調整。

   -------------------而調整樹的主要工作,應該交由AVL 平衡二叉樹來完成

【 過程:BST (內部知道發生了失衡,所以需要做出反應),它定義了一個介面方法(調整平衡方法)來應對失衡情況,這個調整平衡方法,交由能力最強的AVL樹去具體實現】

接下來,講講 調整平衡方法的具體實現:
1,首先從插入結點位置開始去找,找到第一個失衡的祖父結點【這個過程需要判斷結點失衡】------------需要有結點高度屬性
                ----------------------結點類是在BT中定義的,定義時高度並不是一個通用的屬性,此時需要它時,也不便加入【不通用呀】。
                      --------------解決:AVL 樹【此刻需要有一個帶上高度屬性的結點類】重構一下結點類,以便加入高度這個屬性。

2,重構完,回到BST 中的插入(增加)介面方法:發現~該方法內部建立結點時,使用的結點物件都是通用的結點,並沒有使用 AVL 樹定義的結點類物件,
則它就少了高度這個屬性,
傳回給AVL樹中,在AVL樹中就沒法進行高度判斷是否失衡。
----------------------解決:在BST中定義一個建立結點介面方法(預設:建立的結點是通用結點),然後子類 AVL 樹再對建立結點介面方法進行重寫
                          使得 增加(插入)介面方法中需要建立結點時,可以創建出帶有高度屬性的結點物件。

2,設計過程: