資料結構演算法爬坑日記十一

2021-10-23 19:52:50 字數 3148 閱讀 6252

由於陣列和鍊錶在使用過程中檢索,刪除新增會出現一些效率低的問題,樹儲存方式可以大大提高檢索速度,同時又

保證了資料的插入,刪除修改速度

二叉樹常用術語

節點:二叉樹連線的各個部分

根節點:沒有父節點的節點

子節點:相對于父節點來說的節點

葉子節點:沒有子節點的節點

節點的權:節點值

路徑:從根節點開始找到該節點的路線

層:根節點為第一層,以此類推

子樹:以子節點為根節點的樹是相對于父節點的字樹

樹的高度:最大層數

森林:多顆子樹共同組成

二叉樹:每個節點最多有兩個子節點

滿二叉樹:二叉樹的所有葉子節點都在最後一層且節點總數為2

^n-1

,n為層數

完全二叉樹:二叉樹所有葉子節點都在最後一層或倒數第二層,而且最後一層葉子節點在左邊連續,倒數第二層葉子

節點在右邊連續

前序:先訪問父節點,再遞迴訪問左子節點(如果存在)

,最後遞迴訪問右子節點

中序:先遞迴訪問左子節點(如果存在)

,再訪問父節點,最後遞迴訪問右子節點

後序:先遞迴訪問左子節點(如果存在)

,在遞迴訪問右子節點,最後訪問父節點

**示例

** 二叉樹節點類

//二叉樹節點

public

class

binarytreenode

@override

public string tostring()

';}//前序

public

void

pre()if

(this

.right != null)

}//中序

public

void

mid(

) system.out.

println

(this);

if(this

.right != null)

}//後序

public

void

post()

if(this

.right != null)

system.out.

println

(this);

}//前序查詢

public binarytreenode preselect

(int id)

//沒找到就向左遞迴if(

this

.left != null)

if(node != null)

//向右遞迴if(

this

.right != null)

return node;

}//中序查詢

public binarytreenode midselect

(int id)

if(node != null)

system.out.

println

("ok");

if(this

.right != null)if(

this

.id == id)

return node;

}//後序查詢

public binarytreenode postselect

(int id)

if(node != null)if(

this

.right != null)

if(node != null)

system.out.

println

("ok");

if(this

.id == id)

return node;

}//節點刪除,如果不是葉子節點,直接刪除子樹

//因為是單向,所有只能通過父節點先判斷子節點是否是需要刪除的節點,如果不是再分別向兩邊遞迴

public

void

del(

int id)if(

this

.right != null &&

this

.right.id == id)

//如果不是就分別以左右節點為根節點繼續向兩邊遞迴if(

this

.left != null)if(

this

.right != null)}}

** 二叉樹類

//二叉樹

public

class

binarytree

else

}//中序遍歷

public

void

mid(

)else

}//後序遍歷

public

void

post()

else

}//前序查詢

public binarytreenode preselect

(int id)

else

}//中序查詢

public binarytreenode midselect

(int id)

else

}//後序查詢

public binarytreenode postselect

(int id)

else

}//刪除節點

public

void

del(

int id)

else

else}}

}** 測試類

public

class

binarytreetest

else

binarytreenode res2 = binarytree.

midselect(4

);if(res==null)

else

binarytreenode res3 = binarytree.

postselect(4

);if(res==null)

else

//刪除

binarytree.

del(4)

; binarytree.

pre();

}}

資料結構演算法爬坑日記一

線性結構 最常用的資料結構,特點是資料元素之間存在一對一的線性關係 分倆種儲存結構 1.順序儲存結構 又稱為順序表,儲存元素是連續的 2.鏈式儲存結構 又稱為鍊錶,儲存元素不一定是連續的,元素節點中存放資料元素以及相鄰元素的位址結構 常見線性資料結構 陣列 佇列 鍊錶 棧 非線性結構 常見二維陣列 ...

資料結構演算法爬坑日記六

回溯法 也叫向前試探法,試著尋找正確的求解,當探索到某一步不符合規則時,便回退到上一步進行重新選擇,直到獲取預期的解法 問題描述 在8 8的西洋棋棋盤上,放置八個皇后且八個皇后不能互相攻擊 思路 先將第乙個放在第一行第一列,然後將第二個放在第二行第一列,檢查是否滿足規則,如果滿足則進入第三個的放 置...

資料結構演算法爬坑日記八

思想 通過一次排序將一組資料分為兩部分,一部分全部比另一部分小,然後對兩部分分別再進行快排,迴圈此操作,直到不能再分割,便得到乙個有序序列 實現 快速排序 public class quicksort sort arr,0,arr.length 1 system.out.println arrays...