前序查找的思路分析
1.先判断当前节点是不是自己要找的 2.如果是,则返回当前节点 3.如果不是,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查找 4.如果左递归前序查找,找到节点则返回,若未找到,则继续判断当前节点的右子节点是否为空,如果不为空,则继续递归前序查找
前序查找代码实现
public Node
preOrderSearch(int no
) {
if(this.no
==no
) {
return this;
}
Node resNode
=null;
if(this.left
!=null) {
resNode
=this.left
.preOrderSearch(no
);
}
if(resNode
!=null) {
return resNode
;
}
if(this.right
!=null) {
resNode
=this.right
.preOrderSearch(no
);
}
return resNode
;
}
public Node
preOrderSearch(int no
) {
if(root
!=null) {
return root
.preOrderSearch(no
);
}else {
return null;
}
}
中序查找思路分析
1.判断当前节点的左子节点是否为空,如果不为空,则递归中序查找 2.如果找到则返回,如果没有找到,就和当前节点进行比较,如果是则返回当前节点,否则继续进行右递归的中序查找 3.如果右递归中序查找,找到就返回,否则就返回null
中序查找代码实现
public Node
infixOrderSearch(int no
) {
Node resNode
=null;
if(this.left
!=null) {
resNode
=this.left
.infixOrderSearch(no
);
}
if(resNode
!=null) {
return resNode
;
}
if(this.no
==no
) {
return this;
}
if(this.right
!=null) {
resNode
=this.right
.infixOrderSearch(no
);
}
return resNode
;
}
public void infixOrder() {
if(this.left
!=null) {
this.left
.infixOrder();
}
System
.out
.println(this);
if(this.right
!=null) {
this.right
.infixOrder();
}
}
后序查找思路分析
1.判断当前节点的左子节点是否为空,如果不为空,则递归中序查找 2.如果找到就返回,如果没有找到,就判断当前节点的右子节点是否为空,rr颗不为空,则右递归进行后序查找,如果找到,就返回 3.和当前节点进行比较,如果是则返回,如果不是就返回null
后序查找代码实现
public Node
postOrderSearch(int no
) {
Node 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
;
}
if(this.no
==no
) {
return this;
}
return resNode
;
}
public void postOrder() {
if(this.left
!=null) {
this.left
.postOrder();
}
if(this.right
!=null) {
this.right
.postOrder();
}
System
.out
.println(this);
}