算法-java-樹

1.樹的基本概念

根、葉子、父節點、子節點、祖父節點、孫子節點、樹的高是根節點的高度、葉子節點高度爲0、某個幾點的高度即到葉子節點的最長路徑、深度即某節點到根節點的長度、祖先、後裔、真祖先、真後裔

樹的實現

定義節點類,該類包括其本身值、指向第一個兒子的值、指向兄弟的值

樹的遍歷

先序遍歷和後序遍歷

2.二叉樹

一個節點最多有兩個子節點的情況是二叉樹,N個節點的二叉樹最大深度爲N-1,最大高度也是N-1

二叉樹的實現

定義節點處的元素、指向左子節點的鏈、指向右子節點的鏈,N個節點的二叉樹有N+1個NULL鏈。

表達式二叉樹(根據操作符什麼時候打印決定了叫什麼序)

中序遍歷二叉樹(左樹、根節點、右樹)、後序遍歷二叉樹(左樹、右樹、根節點)、先序遍歷二叉樹(根節點、右樹、左樹)

構造表達式樹

後綴表達式,按照數字入棧、操作符使得出棧,然後構成樹結構的思路,最終組成對應該表達式的二叉樹

2.二叉查找樹

若該樹的所有節點,其左樹中的所有節點大小均小於它,而其右樹中的所有節點均大於它。

二叉查找樹類的構造

僅包含一個根節點(二叉樹節點類是查找樹的內部類);contains、findMin、findMax、insert、remove方法;

contains方法分析:將值與根節點的元素對比,若比它小則去左樹找、若比它大去右樹找;一直找到葉子節點,找不到即沒有。

findMin和findMax一個持續向左節點找,一個持續向有節點找,直到葉子節點就是最小或最大值。

3.AVL樹

二叉查找樹中平衡二叉樹性能最高,典型特例AVL,即插入、刪除後能通過調節達到自平衡,插入某節點後會導致其祖先節點中某些會打破avl樹的特點(左右樹的深度相差不超過1),所以從其父節點依次向上遍歷,直到找到第一個需要自平衡(bst balance-self-tree)的點,然後找其子節點、孫子節點,根據其左右樹分佈情況進行左旋、右旋、左右旋、右左旋。

avl樹的代碼實現簡單分析,首先構建基本節點類,然後利用遞歸完成每次插入,插入一個節點後要更新它的高度信息,還要比較它的左右子樹的高度信息,進而實現旋轉平衡調整,自旋時還要記得更新節點高度信息(兩個節點),每次插入完成或者自旋完成返回的節點都是該子樹的根節點。

4.伸展樹(也是一種平衡樹二叉查找樹),當某些樹幾點訪問頻率較高時,將其放到靠近根節點的位置,提高數據利用率。當訪問某個節點時就將某個節點放到根節點位置,其調整規律遵守三種情況,之字形(父節點是左子樹、本身是右子樹或者相反)、父節點就是根節點、一字型(本身、父節點、祖父節點都在左側或者右側)。

5.B樹,M階的B樹具有以下幾大特點:

     1)數據項存儲在樹葉上;2)除根節點外的非葉子節點包含M/2向上取整-1到M-1;

     3)葉子節點的數據項個數爲L/2向上取整到L;4)根節點的子節點在2-M之間

     5)根除外的非葉子節點的兒子樹爲M/2向上取整到M之間

根據是實際存儲空間大小計算M和L大小;最壞的訪問次數情形log_{M/2}N

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章