- 前序遍历查找思路:
- 首先把当前结点和查找的id进行比较,如果相等,则找到结果,返回即可;
- 定义一个缓存结点,用于存储遍历的结点,如果没找到,判断当前结点的左子树是否为空,不为空进行前序遍历查找递归,之后比较当前得到的结果是否为空,不为空,即表示找到该结点;
- 否则,判断当前结点的右子数是否为空,不为空,进行右子数递归前序查找,之后直接返回缓存结点即可;
//前序遍历查找
public HeroNode preOrdersearch(int no){
//比较当前结点是不是
System.out.println("进入前序遍历!");
if (this.no == no){
return this;
}
HeroNode 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;//不用判断是否为空,直接返回即可
}
- 中序遍历查找思路:
- 首先定义一个缓存结点,初始化为空;
- 判断当前结点的左子树是否为空,不为空,进行中序递归查找,比较当前结点是否为空,不为空,直接返回,表示找到;
- 比较当前结点的id和给定的id是否相等,相等表示找到;
- 否则判读当前结点的右子数是否为空,不为空,进行右子数递归查找,直接返回结果即可;
//中序遍历查找
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;
}
- 后序遍历查找思路:
- 首先定义一个缓存结点,初始化为空;
- 判断当前结点的左结点是否为空,不为空,进行左子树递归中序遍历查找,判断缓存结点是否为空,不为空表示找到;
- 判断当前结点的右子树是否为空,不为空,进行右子树递归中序遍历查找,判断缓存结点是否为空,不为空表示找打;
- 比较当前结点的id是否与查找的id相等,相等返回当前结点;
- 返回缓存结点;
//后序查找
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 resNode;
}