資料結構 二叉樹(基礎)

2021-10-02 12:38:58 字數 3596 閱讀 6394

1、樹存在意義:

2、樹的常用術語:

3、二叉樹的概念:

4、二叉樹的遍歷:

4、二叉樹的查詢:

5、二叉樹節點的刪除:

6、**示例

@data

class

heronode

@override

public string tostring()

';}/*前序遍歷*/

public

void

preorder()

/*3、遞迴右子樹前序遍歷*/if(

this

.right != null)

}/**

* 前序遍歷查詢節點

** @param no 待查詢的編號

* @return 返回指定節點資料,如果沒有就返回null

*/public heronode preordersearch

(int no)

heronode resnode = null;

/*如果左子樹不為空,遞迴遍歷左子樹進行節點查詢*/if(

this

.left != null)

/*如果左子樹找到節點,直接返回,毋需再進行右子樹遍歷*/

if(resnode != null)

/*如果右子樹不為空,遞迴遍歷右子樹進行節點查詢*/if(

this

.right != null)

return resnode;

}/*中序遍歷*/

public

void

midorder()

/*2、當前節點*/

system.out.

println

(this);

/*3、遞迴右子樹中序遍歷*/if(

this

.right != null)

}/**

* 中序查詢

** @param no 待查詢的編號

* @return 返回指定節點資料,如果沒有就返回null

*/public heronode midordersearch

(int no)

/*如果左子樹找到節點,直接返回,毋需再進行當前節點和右子樹遍歷*/

if(resnode != null)

/*如果當前節點即為待查詢節點,直接返回當前節點即可*/if(

this

.no == no)

/*如果右子樹不為空,遞迴遍歷右子樹進行節點查詢*/if(

this

.right != null)

return resnode;

}/*後序遍歷*/

public

void

postorder()

/*2、遞迴右子樹後序遍歷*/if(

this

.right != null)

/*3、當前節點*/

system.out.

println

(this);

}/**

* 後序查詢

** @param no 待查詢的編號

* @return 返回指定節點資料,如果沒有就返回null

*/public heronode postordersearch

(int no)

/*如果左子樹找到節點,直接返回,毋需再進行右子樹和前節點遍歷*/

if(resnode != null)

/*如果右子樹不為空,遞迴遍歷右子樹進行節點查詢*/if(

this

.right != null)

/*如果當前節點在右子樹找到,毋需再進行當前節點的判斷*/

if(resnode != null)

/*進行當前節點的判斷*/if(

this

.no == no)

return resnode;

}/**

* 根據編號刪除節點

* 1、如果是葉子節點直接刪除該節點

* 2、如果是非葉子節點直接刪除該子樹

** @param no 待刪除的節點編號

*/public

void

delheronode

(int no)

/*判斷右節點是否是待刪除的節點,如果是直接刪除*/if(

this

.right != null &&

this

.right.no == no)

/*遞迴左子樹*/if(

this

.left != null)

/*遞迴右子樹*/if(

this

.right != null)

}/**

* 根據編號刪除節點

* 1、如果是葉子節點直接刪除該節點

* 2、如果是非葉子節點且只有乙個子節點,將子節點置為當前節點

* 3、如果是非葉子節點且有兩個子節點,將左節點置為當前節點

** @param no 待刪除的節點編號

*/public

void

delheronodeleft

(int no)

else

return;}

if(this

.right != null &&

this

.right.no == no)

else

return;}

/*遞迴左子樹*/if(

this

.left != null)

/*遞迴右子樹*/if(

this

.right != null)

}}

@data

@allargsconstructor

class

binarytree

else

}public

void

midorder()

else

}public

void

postorder()

else

}public

void

delneronode

(int no)

/*如果根節點的編號與待刪除節點的編號一致。直接將root節點置null即可*/

if(root.

getno()

== no)

/*遞迴刪除指定節點*/

root.

delheronode

(no);}

public

void

delneronodeleft

(int no)

/*如果根節點的編號與待刪除節點的編號一致。直接將root節點置null即可*/

if(root.

getno()

== no)

else

return;}

/*遞迴刪除指定節點*/

root.

delheronodeleft

(no);}

}

public

class

binarytreedemo

}

資料結構 二叉樹基礎

資料結構真心不是蓋的啊!現在覺得為什麼公司面試和筆試,1 3的重點都處在這上面。真行不容易啊,並且很容易檢測出乙個人的實力到底如何。不要把二叉樹想的很複雜,其實就是鍊錶的公升級版 畢竟學渣,認識的太膚淺了,沒事,反正是寫給自己看的 汗 二叉樹的鏈式儲存結構 既然是鏈式,那麼無非就是使用鍊錶的形式進行...

資料結構 二叉樹基礎

二叉樹 每個結點最多有兩個子樹的樹結構。左子樹及右子樹 結點的兩個子結點被稱為左子樹和右子樹。性質 度為0的結點總比度為2的結點多一 二叉樹第i層上的結點數目最多為 2 i 1 包含n個結點的二叉樹的高度至少為log2 n 1 滿二叉樹 乙個二叉樹,如果每乙個層的結點數都達到最大值,則這個二叉樹就是...

資料結構 二叉樹基礎

二叉樹 每個結點最多有兩個子樹的樹結構。左子樹及右子樹 結點的兩個子結點被稱為左子樹和右子樹。性質 度為0的結點總比度為2的結點多一 二叉樹第i層上的結點數目最多為 2 i 1 包含n個結點的二叉樹的高度至少為log2 n 1 滿二叉樹 乙個二叉樹,如果每乙個層的結點數都達到最大值,則這個二叉樹就是...