Java-二叉树的前序、中序和后序查询

前序查找的思路分析

1.先判断当前节点是不是自己要找的
2.如果是,则返回当前节点
3.如果不是,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查找
4.如果左递归前序查找,找到节点则返回,若未找到,则继续判断当前节点的右子节点是否为空,如果不为空,则继续递归前序查找

前序查找代码实现

//前序遍历查找
	//如果找到返回Node,没找到返回null
	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);
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值