LeetCode算法学习笔记 - Day8

Java实现二叉树的广度优先搜索

例如:

	3
   / \
  9  20
    /  \
   15   7

返回值:[3,9,20,15,7]
也就是层序遍历,把树的每一层遍历完成之后再进入下一层
使用广度优先搜索前先要了解队列的先进先出(FIFO)

	Queue<Integer> queue = new LinkedList<Integer>(); //new一个队列
    queue.offer(0); // 第一个进 [0]
    queue.offer(1); // 第二个进 [0, 1]
    System.out.println(queue.poll()); //返回第一个元素然后删除 第一个出 当前:0  剩余:[1]
    System.out.println(queue.poll()); //返回第一个元素然后删除 第二个出 当前:1  剩余:[null]

这应该很好理解吧

了解完这个概念就来看看二叉树的BFS

public class Node {
    public int data;
    public Node left;
    public Node right;

    public Node(){

    }

    public Node(int i){
        this.data = i;
    }
}

	ArrayList<Integer> list = new ArrayList<>();
    Node node = new Node(50);
    node.left = new Node(10);
    node.right = new Node(90);
    node.left.left = new Node(20);
    node.left.right = new Node(30);
    node.right.left = new Node(70);
    node.right.right = new Node(80);
	//上面都是数据的准备,最后的数据结构是这样的
				50
			   / \
			  10  90
			 /  \/  \
			20 30 70 80
	//所以最后遍历完成的结果应该是[50,10,90,20,30,70,80]

    Queue<Node> queue = new LinkedList<Node>(); //new一个队列
    queue.offer(node); //把root放入队列
    while (queue.size() != 0){ //如果队列为空就表示遍历完了所有的结点了
        Node poll = queue.poll(); //取出最先进入的结点并删除
        //下面就不用讲了吧...
        if (poll.left != null){
            queue.offer(poll.left);
        }
        if (poll.right != null){
            queue.offer(poll.right);
        }
        list.add(poll.data);
    }
    System.out.println(list); // [50, 10, 90, 20, 30, 70, 80]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值