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 滿二叉樹 乙個二叉樹,如果每乙個層的結點數都達到最大值,則這個二叉樹就是...