前序中序后序的方式查詢指定的節點
前序查找思路
1.先判斷當前節點的no是否等於要查找的
2.如果是相等,則返回當前節點
3.如果不等,則判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找
4.如果左遞歸前序查找,找到節點,則返回,否則繼續判斷,當前節點的右子節點是否為空,如果
不為空,則繼續向右遞歸前序查找
中序查找思路
1.判斷當前節點的左子節點是否為空,如果不為空,則遞歸中序查找
2.如果找到,則返回,如果沒有找到,就和當前節點比較,如果是則返回當前節點,否則繼續進行右
遞歸的中序查找
3.如果右遞歸中序查找,找到就返回,否則返回null
后序查找思路
1.判斷當前節點的左子節點是否為空,如果不為空,則遞歸后序查找
2.如果找到就返回,如果沒有找到就判斷當前節點的右子節點是否為空,如果不為空,則右遞歸進行
后序查找,如果找到就返回
3.和當前節點進行比較,如果是就返回,如果不是就返回null
代碼實現
HeroNode類中的三個方法
//前序遍歷查找
//如果找到就返回node,如果沒有找到就返回null
public HeroNode preOrderSearch(int no){
System.out.println("進入前序遍歷");
if(this.no==no){
return this;
}
//1.判斷當前節點的左子節點是否為空,如果不為空,則遞歸前序查找
//2.如果左遞歸前需查找找到節點,就返回
HeroNode resNode=null;
if (this.left!=null){
resNode=this.left.preOrderSearch(no);
}
if (resNode!=null){//說明左子樹找到
return resNode;
}
//1.判斷當前節點的右子節點是否為空,如果不為空,則遞歸前序查找
//2.如果右遞歸前需查找找到節點,就返回
if (this.right!=null){
resNode=this.right.preOrderSearch(no);
}
return resNode;
}
//中序遍歷查找
public HeroNode infixOrderSearch(int no){
//判斷當前節點的左子節點是否為空,如果不為空,則遞歸中序查找
HeroNode resNode=null;
if (this.left!=null){
resNode=this.left.infixOrderSearch(no);
}
if (resNode!=null){
return resNode;
}
System.out.println("進入中序遍歷查找");
//如果左子樹沒有找到,就查找當前節點
if (this.no==no){
return this;
}
//否則繼續中序查找
if (this.right!=null){
resNode=this.right.infixOrderSearch(no);
}
return resNode;
}
//后序遍歷查找
public HeroNode postOrderSearch(int no){
HeroNode resNode=null;
//判斷當前節點的左子節點是否為空,如果不為空,則遞歸后序查找
if (this.left!=null){
resNode=this.left.postOrderSearch(no);
}
if (resNode!=null){
return resNode;
}
//如果左子樹沒有找到就向右子樹遞歸后序查找
if (this.right!=null){
resNode=this.right.postOrderSearch(no);
}
if (resNode!=null){
return resNode;
}
System.out.println("進入后序遍歷查找");
//如果左右子樹都沒有找到,就比較當前節點是不是
if (this.no==no){
return this;
}
return null;
}
BinaryTree中的三個方法
//前序遍歷查找
public HeroNode preOrderSearch(int no){
if (root!=null){
return root.preOrderSearch(no);
}else {
return null;
}
}
//中序遍歷查找
public HeroNode infixOrderSearch(int no){
if (root!=null){
return root.infixOrderSearch(no);
}else {
return null;
}
}
//后序遍歷查找
public HeroNode postOrderSearch(int no){
if (root!=null){
return root.postOrderSearch(no);
}else {
return null;
}
}