二叉樹的前序查詢 中序查詢和後序查詢

2021-10-03 10:55:28 字數 2981 閱讀 7598

使用前序,中序,後序的方式來查詢指定的結點

前序查詢思路

1.先判斷當前結點的no是否等於要查詢的

2.如果是相等,則返回當前結點

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

4.如果左遞迴前序查詢,找到結點,則返回,否繼續判斷,當前的結點的右子節點是否為空,如果不空,則繼續向右遞迴前序查詢.

中序查詢思路

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

2.如果找到,則返回,如果沒有找到,就和當前結點比較,如果是則返回當前結點,否則繼續進行右遞迴的中序查詢

3.如果右遞迴中序查詢,找到就返回,否則返回null

後序查詢思路

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

2.如果找到,就返回,如果沒有找到,就判斷當前結點的右子節點是否為空,如果不為.空,則右遞迴進行後序查詢,如果找到,就返回

3.就和當前結點進行比較,如果是則返回,否則返回null .

public class binarytreedemo 

else

//中序查詢

resheronode = binarytree.

infixordersearch(5

);if(resheronode != null)

else

//後序查詢

resheronode = binarytree.

postordersearch(5

);if(resheronode != null)

else}}

//定義binarytree 二叉樹

class binarytree

//前序遍歷

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}}

class heronode

public string getname()

public void

setname

(string name)

public int

getno()

public void

setno

(int no)

public void

setleft

(heronode left)

public void

setright

(heronode right)

public heronode getleft()

public heronode getright()

@override

public string tostring()

';}//編寫前序遍歷

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);}

//前序遍歷查詢

public heronode preordersearch

(int no)

heronode resheronode = null;

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

if(this.left != null)

if(resheronode != null)

//左遞迴前序查詢,找到節點,則返回,繼續判斷

if(this.right != null)

return resheronode;

}//中序遍歷查詢

public heronode infixordersearch

(int no)

if(reshernode != null)

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

if(this.no == no)

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

if(this.right != null)

return reshernode;

}//後序查詢

public heronode postordersearch

(int no)

if(resheronode != null)

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

if(this.right != null)

if(resheronode != null)

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

if(this.no == no)

return resheronode;

}}

二叉樹的前序,中序,後序查詢

主要還是對遞迴的理解,查詢和遍歷都是用了兩個遞迴,遞迴的查詢總是先查詢乙個節點的最左邊節點。每次遞迴都會列印左右兩邊的節點。其實有點像while迴圈,但是乙個遞迴的方法中還包含著另乙個遞迴。按照順序執行 package a public class binarytreedemo class bina...

前序中序和中序後序還原二叉樹

前序中序還原二叉樹 struct node creat int len,char str1,char str2 由先序序列和中序序列建立二叉樹 root lchild creat i,str1 1,str2 建立左子樹 root rchild creat len i 1,str1 i 1,str2 ...

二叉樹遍歷(前序,中序,後序

二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...