二叉树广度优先搜索和深度优先搜索

这里的二叉树不是特殊的二叉树,只是一个普通的二叉树
广度优先其实就是一层一层的搜索,第一层遍历完再遍历第二层(用队列实现)
深度优先其实就是一条分叉路先走到底,再返回一级走另一个分叉路(用栈实现)

广度优先(用队列实现)

也叫层序遍历

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;



 class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
public class Test {
	void Print(TreeNode pRoot) {
		ArrayList<TreeNode> list = new ArrayList<TreeNode>();
		 Queue<TreeNode> qu = new LinkedList<TreeNode>();
		 qu.offer(pRoot);
		 TreeNode t1 = null;
		 while(!qu.isEmpty()){
			 t1 = qu.poll();
			 list.add(t1);
			 if(t1.left!=null) {
				 qu.offer(t1.left);
			 }
			 if(t1.right!=null) {
				 qu.offer(t1.right);
			 }
		 }
		 }
		  }

队列实现图就像下面这样
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后再循环…

深度优先(用栈来实现)

也叫前序遍历

import java.util.ArrayList;
import java.util.Stack;



 class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
public class Test {
	void Print(TreeNode pRoot) {
		ArrayList<TreeNode> list = new ArrayList<TreeNode>();
		Stack<TreeNode> stack = new Stack<TreeNode>();
		
		stack.add(pRoot);
		TreeNode t1=null;
		while (!stack.isEmpty()) {
			t1 = stack.pop();  
			list.add(t1);
			if(t1.right != null) {
				stack.add(t1.right);
			}
			if(t1.left != null) {
				stack.add(t1.left);
			}
			
		}
	}		 
	 }

栈实现深度优先的示例图
在这里插入图片描述
在这里插入图片描述
上面的右节点和左节点的位置应该是先进右节点后进左节点,这样会先出左节点
在这里插入图片描述
在这里插入图片描述
成下面这样的图
在这里插入图片描述
剩下的就是循环又循环

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值