二叉樹遍歷查詢

2021-10-05 21:03:36 字數 3456 閱讀 7273

1)前序遍歷:先輸出父節點,再遍歷左子樹和右子樹

2)中序遍歷:先遍歷左子樹,再輸出父節點,再遍歷右子樹

3)後序遍歷:先遍歷左子樹,再遍歷右子樹,最後輸出父節點

4)小結:看輸出父節點的順序,就確定是前序,中序還是後序

package com.atguigu.tree;

public class binarytreedemo else

//中序遍歷查詢

//中序遍歷3次

// system.out.println("中序遍歷方式~~~");

// heronode resnode = binarytree.infixordersearch(5);

// if (resnode != null) else

//後序遍歷查詢

//後序遍歷查詢的次數 2次

// system.out.println("後序遍歷方式~~~");

// heronode resnode = binarytree.postordersearch(5);

// if (resnode != null) else

//測試一把刪除結點

system.out.println("刪除前,前序遍歷");

binarytree.preorder(); // 1,2,3,5,4

binarytree.delnode(5);

system.out.println("刪除後,前序遍歷");

binarytree.preorder(); // 1,2,3,4

}}//定義binarytree 二叉樹

class binarytree

//刪除結點

public void delnode(int no) else

}else

} //前序遍歷

public void preorder() else }

//中序遍歷

public void infixorder() else

} //後序遍歷

public void postorder() else }

//前序遍歷

public heronode preordersearch(int no) else

} //中序遍歷

public heronode infixordersearch(int no) else

} //後序遍歷

public heronode postordersearch(int no) else }}

//先建立heronode 結點

class heronode

public int getno()

public void setno(int no)

public string getname()

public void setname(string name)

public heronode getleft()

public void setleft(heronode left)

public heronode getright()

public void setright(heronode right)

@override

public string tostring()

//遞迴刪除結點

//1.如果刪除的節點是葉子節點,則刪除該節點

//2.如果刪除的節點是非葉子節點,則刪除該子樹

public void delnode(int no)

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

if(this.right != null && this.right.no == no)

//4.我們就需要向左子樹進行遞迴刪除

if(this.left != null)

//5.則應當向右子樹進行遞迴刪除

if(this.right != null) }

//編寫前序遍歷的方法

public void preorder()

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

if(this.right != null)

} //中序遍歷

public void infixorder()

//輸出父結點

system.out.println(this);

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

if(this.right != null)

} //後序遍歷

public void postorder()

if(this.right != null)

system.out.println(this); }

//前序遍歷查詢

/***

* @param no 查詢no

* @return 如果找到就返回該node ,如果沒有找到返回 null

*/public heronode preordersearch(int no)

//1.則判斷當前結點的左子節點是否為空,如果不為空,則遞迴前序查詢

//2.如果左遞迴前序查詢,找到結點,則返回

heronode resnode = null;

if(this.left != null)

if(resnode != null)

//1.左遞迴前序查詢,找到結點,則返回,否繼續判斷,

//2.當前的結點的右子節點是否為空,如果不空,則繼續向右遞迴前序查詢

if(this.right != null)

return resnode; }

//中序遍歷查詢

public heronode infixordersearch(int no)

if(resnode != null)

system.out.println("進入中序查詢");

//如果找到,則返回,如果沒有找到,就和當前結點比較,如果是則返回當前結點

if(this.no == no)

//否則繼續進行右遞迴的中序查詢

if(this.right != null)

return resnode;

}//後序遍歷查詢

public heronode postordersearch(int no)

if(resnode != null)

//如果左子樹沒有找到,則向右子樹遞迴進行後序遍歷查詢

if(this.right != null)

if(resnode != null)

system.out.println("進入後序查詢");

//如果左右子樹都沒有找到,就比較當前結點是不是

if(this.no == no)

return resnode; }

}//

二叉樹的遍歷 查詢

一 二叉樹的性質 1 非空二叉樹的第n層上至多有2 n 1 個元素。2 深度為h的二叉樹至多有2 h 1個結點。3 滿二叉樹 所有終端都在同一層次,且非終端結點的度數為2。在滿二叉樹中若其深 度為h,則其所包含的結點數必為2 h 1。4 完全二叉樹 葉子節點只能出現在最下兩層,最下層的葉子一定集中在...

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...