菜鳥筆記之資料結構(9)

2021-10-25 06:13:49 字數 2668 閱讀 5492

宣告:以下是學的尚矽谷網課並結合網上資料所記的筆記。可能會有一些錯誤,發現了會修改。

概念

樹是一種資料結構,它是由n(n>=1)個有限節點組成乙個具有層次關係的集合。把它叫做「樹」是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:每個節點有零個或多個子節點;沒有父節點的節點稱為根節點;每乙個非根節點有且只有乙個父節點;除了根節點外,每個子節點可以分為多個不相交的子樹。

注:每個節點是乙個物件,可以放id,name等資訊。

種類

作用

可提高資料儲存、讀取的效率。比如二叉排序樹,既可以保證資料的檢索速度,也保證資料的增刪改速度。其查詢有點像二分查詢,新增和刪除時效率高,找到父節點對其left或right指標操作即可。

二叉樹:每個節點最多只能有兩個子節點的一種形式的樹,二叉樹子節點可分為左節點和右節點。如圖1所示為乙個二叉樹。

h,e,f,g沒有子節點,為葉子節點。c是f、g的父節點,是a的子節點。

常用術語:

節點,根節點,父節點,子節點,葉子節點(沒有子節點的節點);

節點的權(節點的值);

路徑(從root節點找到某個節點的路線);

層,子樹;

樹的高度(最大層數);

森林(多顆子樹構成森林)。

前序遍歷:(1)先輸出當前節點(初始為root節點);(2)如果左子節點不為空,則繼續前序遍歷;(3)如果右子節點不為空,則遞迴繼續前序遍歷。圖一的前序遍歷結果為:a->b->d->h->e->c->f->g。**如下:

public

void

preorder()

//遞迴向右子樹前序遍歷if(

this

.right != null)

}

中序遍歷:(1)如果當前節點的左子節點不為空,則遞迴中序遍歷;(2)輸出當前節點;(3)如果當前節點的右子節點不為空,則遞迴中序遍歷。圖一的中序遍歷結果為: d->h->b->e->a->f->c->g。**如下:

public

void

infixorder()

//輸出父節點

system.out.

println

(this);

//遞迴向右子樹中序遍歷if(

this

.right != null)

}

後序遍歷:(1)如果當前節點的左子節點不為空,則遞迴後序遍歷;(2)如果當前節點的右子節點不為空,則遞迴後序遍歷;(3)輸出當前節點。圖一的後序遍歷結果為: h->d->e->b->f->g->c->a。**如下:

public

void

postorder()

//遞迴向右子樹後序遍歷if(

this

.right != null)

//輸出父節點

system.out.

println

(this);

}

前序、中序還是後序遍歷可以根據父節點的輸出位置來判斷。前序查詢思路:(1)先判斷當前節點的值是否為要查詢的,如果相等,返回當前節點;(2)如果不相等,判斷當前節點的左子節點是否為空,不為空,則遞迴前序查詢;(3)如果左遞迴查詢沒有找到節點,則判斷當前節點的右子節點是否為空,不為空,則遞迴向右前序查詢。

public node preordersearch

(int no)

node resnode = null;if(

this

.left != null)

if(resnode != null)if(

this

.right != null)

return resnode;

}

中序、後序查詢類似,只是順序不同。思路:如果只有root,等價於將二叉樹置空。還要考慮樹是否為空樹。(首先處理)

判斷當前節點的子節點是否為需要刪除的節點,而不是判斷當前節點;

如果當前節點的左子節點不為空,且為要刪除的節點,將this.left == null,並返回(結束遞迴);

如果當前節點的右子節點不為空,且為要刪除的節點,將this.right == null,並返回(結束遞迴);

第2,3步都沒有刪除節點,需要向左子樹遞迴刪除;

如果第4步也沒有完成,則應向右子樹遞迴刪除;

--------------------------------------- 個人學習筆記----------------------------------------

菜鳥筆記之資料結構(4)

宣告 以下都是學的尚矽谷網課所記的筆記。應用場景 表示式的轉換和求值。中綴表示式轉字尾表示式。二叉樹的遍歷。圖形的深度優先演算法。使用陣列模擬棧的思路分析 定義乙個top表示棧頂,初始化為 1 入棧 當有資料data需要加入棧時,top stack top data 出棧 int value sta...

資料結構與演算法之美(筆記9)雜湊演算法

我們前面講到雜湊表,雜湊函式,這裡又是雜湊演算法,實際上,雜湊函式就是雜湊演算法的乙個特例。只不過在雜湊表中,我們通常希望雜湊函式簡單,才不會影響查詢等的效能。雜湊演算法的定義和原理很簡單,就是把任意二進位制串值對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始的資料對映之後得到...

資料結構9 查詢

查詢 靜態查詢 不涉及插入和刪除操作的查詢 適用於查詢集合一經生成,便只對其進行查詢,而不進行插入和刪除操作 或經過一段時間的查詢之後,集中的進行插入和刪除等修改操作 動態查詢 設計插入和刪除操作的查詢 適用於查詢與刪除操作在同乙個階段進行,例如當查詢成功時,要刪除查詢到的記錄,當查詢不成功時,要插...