二叉树的广度优先搜索(BFS)和例题

二叉树广度优先搜索(BFS)

二叉树广度优先搜索意味着对节点的遍历是一层一层的,一层访问完才访问下一层。那么就是说从上往下访问时,父节点总是比子节点先访问。于是可以采用队列,队列的特征就是先进先出,于是可以按父子关系依次入队出队。

想象一下:对于一颗二叉树:

​ a

​ b c

d e f

按父节点先入队,子节点后入队时有:

  1. a入队,队列:a

  2. 检测a的左右孩子,让其入队,同时由于a被访问,a出队,队列:b c

  3. 同上,访问b,同时让b的孩子入队,队列:c d e

  4. 访问c,让c的孩子入队,队列:d e f

  5. def都没有孩子,依次访问,队列为空

此时来看看访问顺序:a b c d e f,可以看到访问顺序时正确的

代码:

   /*
   内部节点类
    class Node{
        int val;
        Node left;
        Node right;
    }
    */
    public void dfs(Node root) {
        //队列用来保存节点
        //由于父节点先入队,所以先访问父节点,
        //等父节点访问完了才开始访问子节点,此时子节点变为父节点
        if (root == null) {
            System.out.println("null");
        } else {
            Queue<Node> nodeQueue = new LinkedList<>();
            //将根节点入队
            nodeQueue.add(root);
            while (!nodeQueue.isEmpty()) {
                //父节点出队
                Node current = nodeQueue.remove();
                System.out.println(current.val);
                if (current.left != null) {
                    //左孩子入队
                    nodeQueue.add(current.left);
                }
                if (current.right != null) {
                    //右孩子入队
                    nodeQueue.add(current.right);
                }
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值