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);
	}
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页