二叉树前序遍历查找
二叉树中序遍历查找
二叉树后续遍历查找
首先我们先看这张图片并进行短要的分析一下
这是一张示例图
根据前面我们学过的前中后序遍历我们可以通过前序遍历知道指针首先会找的是根结点 然后再找根结点的左边 再找根结点的右边的3然后找3的左边以及右边 所以输出的顺序是1,2,3,5,4
所以我们的前序查找也是根据这个顺序去查找 先直接上代码
//下面为实体类里面的代码块方法
public HeroNode preOrderSearch(int no){
System.out.println("开始前序");
if (this.no == no){//判断根结点编号是否所查编号
return this;
}
HeroNode node = null;//定义一个对象来接收值
if(this.left != null){
node = this.left.preOrderSearch(no);
}
if (node != null){
return node;
}
if (this.right != null){
node = this.right.preOrderSearch(no);
}
return node;
}
//下面为tree对象里面的代码块方法
public HeroNode preOrderSeach(int no){
if (this.root != null){//这边判断不为空直接进行前序递归查找就好
return this.root.preOrderSearch(no);
}else {
return null;//为空就输出Null
}
}
首先我们可以看到是先判断根结点的编号是不是所查编号。如果是就return这个编号,不是的话我们向左遍历如果左边不为空 那么我们向左递归遍历查找并且把值放在我们定义的对象node里面如果node不为空那么说明已经找到了编号对应的值我们直接return就行。如果为空我们继续判断右边是否为空,如果不为空我们向右递归查找,并且将值赋给node 最后return node就行。那么这时候肯定有人会问为什么向右递归查找之后为什么不做个判断呢?因为如果右边查找到我们就直接输出node 如果没有查找到我们上面已经定义了node为Null,所以我们直接输出空就行。
中序遍历
中序遍历查找的话我这边就直接上代码,可以根据前序遍历查找一样先判断左边是否为空,不为空向左边遍历查找,为空的话与当前结点进行比较。不是的话,咱们就向右递归查找。最后输出node。记住一点就是我们全程都需要一个对象变量。而且遍历查找都需要根据我们前中后序的遍历顺序进行操作的。
//下面为实体类里面的代码块方法
//中序遍历查找
public HeroNode initOrderSearch(int no){
HeroNode node = null;
if (this.left != null){
node = this.left.initOrderSearch(no);
}
if (node != null){
return node;
}
System.out.println("开始中序");
if (this.no == no){
return this;
}
if (this.right != null){
node = this.right.initOrderSearch(no);
}
return node;
}
//下面为tree里面的代码块方法
//中序遍历查找
public HeroNode initOrderSearch(int no){
if (this.root != null){
return this.root.initOrderSearch(no);
}else {
return null;
}
}
后续遍历查找的话我们就直接上代码了。可以根据后序遍历进行后序便来查找。
//下面为实体类里面的代码块方法
//后续遍历查找
public HeroNode postOrderSearch(int no){
HeroNode node = null;
if (this.left != null){
node = this.left.postOrderSearch(no);
}
if (node != null){
return node;
}
if (this.right != null){
node = this.right.postOrderSearch(no);
}
if (node != null){
return node;
}
System.out.println("开始后序");
if (this.no == no){
return this;
}
return node;
}
//下面为tree里面的代码块方法
//后续遍历查找
public HeroNode postOrderSearch(int no){
if (this.root != null){
return this.root.postOrderSearch(no);
}else {
return null;
}
}
上面就是我总结的前中后序遍历查找。最后还是强调一下,有错误一定一定要指出来。因为我也是在学习当中,可能有理解不全的地方。然后如果有初学者看到我这篇博客的话希望能看一下思想然后自己去把代码写出来就非常棒了。
最后感谢各位能来看!!!!!!欢迎指教,本人新手。
最后讲一下,下期咱们继续讲二叉树,我们讲一下顺序存储二叉树和二叉树如何删除结点