更新時(shí)間:2022-12-30 10:51:04 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1357次
二叉樹遞歸遍歷算法是什么?動(dòng)力節(jié)點(diǎn)小編來告訴大家。由于樹遍歷規(guī)則是遞歸的,因此二叉樹的遞歸遍歷非常流行和方便。因此,根據(jù)二叉樹的子節(jié)點(diǎn)優(yōu)先遍歷規(guī)則,遞歸遍歷順序有以下三種:
1.前序:訪問根節(jié)點(diǎn),遍歷左子樹,遍歷右子樹
2.中序:遍歷左子樹,訪問根節(jié)點(diǎn),遍歷右子樹
3.后序:遍歷左子樹,遍歷右子樹,訪問根節(jié)點(diǎn)
可以概括為一些規(guī)則。首先前序遍歷第一個(gè)根節(jié)點(diǎn)為根節(jié)點(diǎn),后序遍歷最后一個(gè)根節(jié)點(diǎn)為根節(jié)點(diǎn)。
其次,前序遍歷的最后一個(gè)根節(jié)點(diǎn)是右子樹的最右子節(jié)點(diǎn),中序遍歷的最后一個(gè)節(jié)點(diǎn)是根節(jié)點(diǎn)右子樹的最右節(jié)點(diǎn)。三、最左根節(jié)點(diǎn)中序遍歷第一個(gè)節(jié)點(diǎn)到左子樹的根,后序遍歷是將第一個(gè)節(jié)點(diǎn)作為左子樹的左子節(jié)點(diǎn)。
從以上規(guī)律,我們可以得出以下推論。整樹排序可以通過前序遍歷和后序遍歷推導(dǎo)出來。中序遍歷和后序遍歷可以確定一棵二叉樹。前序遍歷和后序遍歷不能單獨(dú)確定一棵二叉樹。
先來寫一棵二叉樹的前序遍歷、中序遍歷和后序遍歷
公共類 BinaryTree 實(shí)現(xiàn) BinaryTTree {
公共二進(jìn)制節(jié)點(diǎn) 根;
公共二叉樹(){this.root=null;}
Public Boolean isEmpty(){return this.root==null;}
}
public void preOrder(){ // 前序遍歷
PreOrder(root);// 調(diào)用遞歸方法進(jìn)行預(yù)序遍歷
}
公共無效預(yù)購(gòu)(BinaryNode p){
如果(p!=空)
{
System.out.print(p.data.toString()+” ”);//獲取根節(jié)點(diǎn)
preOrder(p.left);// 根據(jù)前序遍歷左子樹,然后遞歸調(diào)用
preorder(p.right);// 根據(jù)前序遍歷右子樹,然后遞歸調(diào)用
}
public void inOrder(){//中序遍歷
按順序(根);
}
公共 void inOrder(BinaryNode p)
{
如果(p!=空)
{
按順序(p.left);
System.out.print(p.data.toString()+””);
按順序(p.right);
}
}
public void postOrder(){//后序遍歷
后訂單(根);
}
public void postOrder(BinaryNode p)
{
如果(p!=空)
{
postOrder(p.left);
postOrder(p.right);
System.out.print(p.data.toString()+””);
}
}
上面的算法是根據(jù)根節(jié)點(diǎn)p的定義來確定整個(gè)遞歸的方法,每次遞歸都會(huì)細(xì)化根節(jié)點(diǎn)p,然后找到子節(jié)點(diǎn)p,子節(jié)點(diǎn)優(yōu)先。如果有子節(jié)點(diǎn),則繼續(xù)查找,直到?jīng)]有子節(jié)點(diǎn),就可以依次輸出之前查找過的節(jié)點(diǎn)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743