链式存储的二叉树:
三种查找方式:
- 前序:根左右
- 中序:左根右
- 后序:左右根
注:三种查找方式区别在于,找同一个值的时候,执行次数不同
代码:
1:测试类中先写好要遍历的树,然后写出对应的方法【其余代码看4.4】
/**
* 三次查找比较的次数不同
*/
//前序查找
TreeNode result = binTree.frontSearch(3);
System.out.println("前序查找3和右节点的值是否相同:" + (result == rootR));
//中序查找
TreeNode result1 = binTree.midSearch(3);
System.out.println("中序查找3和右节点的值是否相同:" + (result1 == rootR));
//后序查找
TreeNode result2 = binTree.afterSearch(3);
System.out.println("后序查找3和右节点的值是否相同:" + (result2 == rootR));
2:创建二叉树(写出根节点对应的方法)
public TreeNode frontSearch(int i) { //前序查找
return root.frontSearch(i);
}
public TreeNode midSearch(int i) { //中序查找
return root.midSearch(i);
}
public TreeNode afterSearch(int i) { //后序查找
return root.afterSearch(i);
}
3:创建树节点(根据对应的方法,写出他的实现代码)
public TreeNode frontSearch(int i) { //前序查找
TreeNode target = null;
//对比当前节点的值
if(this.value == i){
return this;
//当前节点的值不是要查找的节点
}else {
//查找左儿子
if(leftNode != null){
//有可能查到,也可能查不到,查不到的时候target还是一个null
target = leftNode.frontSearch(i);
}
//如果不为空,说明在左儿子中已经找到了
if(target != null){
return target;
}
//查找右儿子
if(rightNode != null){
target = rightNode.frontSearch(i);
}
}
return target;
}
public TreeNode midSearch(int i) { //中序查找
TreeNode target = null;
//查找左儿子
if(leftNode != null){
//有可能查到,也可能查不到,查不到的时候target还是一个null
target = leftNode.midSearch(i);
}
//如果不为空,说明左儿子总已经找到了
if(target != null){
return target;
}
//对比当前节点的值
if(this.value == i){
return this;
}
//查找右儿子
if(rightNode != null){
target = rightNode.midSearch(i);
}
return target;
}
public TreeNode afterSearch(int i) { //后序查找
TreeNode target = null;
//查找右儿子
if(rightNode != null){
target = rightNode.afterSearch(i);
}
//如果不为空,说明左儿子总已经找到了
if(target != null){
return target;
}
//查找左儿子
if(leftNode != null){
target = leftNode.afterSearch(i);
}
//对比当前节点的值
if(this.value == i){
return this;
}
return target;
}
结果:和我们推导的一样