思想:在遍历函数上加以修改,设置函数返回值,找到返回1(在原输出位置做相等判断),否则返回0,在递归函数下方做判断,如果返回值为1就让它继续返回1。
代码如下:
package Tree;
public class BTDemo {
public static void main(String[] args) {
char[] arr=new char[30];
int n=0;
for (char i = 'A'; i < 'Z'; i++,n++) {
arr[n]=i;
}
BTNode node=new BTNode(1,'A');
creatTree(node,arr,1);
int id=25;
preShowTree(node,id);
midShowTree(node,id);
postShowTree(node,id);
}
public static void creatTree(BTNode node,char[] arr,int id){
if(id>12){
return;
}
int new_id=2*id;
BTNode node1=new BTNode(new_id,arr[new_id-1]);
BTNode node2=new BTNode(new_id+1,arr[new_id]);
node.left=node1;
node.right=node2;
creatTree(node1,arr,new_id);
creatTree(node2,arr,new_id+1);
}
public static int preShowTree(BTNode node,int id){
if(node.id==id){
System.out.println(node.name);
return 1;
}
if(node.left!=null){
int res=preShowTree(node.left,id);
if(res==1){
return 1;
}
}
if(node.right!=null){
int res=preShowTree(node.right,id);
if(res==1){
return 1;
}
}
return 0;
}
public static int midShowTree(BTNode node,int id){
if(node.left!=null){
int res=midShowTree(node.left,id);
if(res==1){
return 1;
}
}
if(node.id==id){
System.out.println(node.name);
return 1;
}
if(node.right!=null){
midShowTree(node.right,id);
}
return 0;
}
public static int postShowTree(BTNode node,int id){
if(node.left!=null){
int res=postShowTree(node.left,id);
if(res==1){
return 1;
}
}
if(node.right!=null){
int res=postShowTree(node.right,id);
if(res==1){
return 1;
}
}
if(node.id==id){
System.out.println(node.name);
return 1;
}
return 0;
}
}
class BTNode{
public int id;
public char name;
public BTNode left;
public BTNode right;
public BTNode(int id,char name){
this.id=id;
this.name=name;
}
}