二叉树的最小深度

在这里插入图片描述
二叉树的遍历。采用BFSDFS理论上都可以,这里采用BFS

首先给出BFS的框架:

// 计算从起点 start 到终点 target 的最近距离
int BFS(Node start, Node target) {
    Queue<Node> q; // 核心数据结构
    Set<Node> visited; // 避免走回头路

    q.offer(start); // 将起点加入队列
    visited.add(start);
    int step = 0; // 记录扩散的步数

    while (q not empty) {
        int sz = q.size();
        /* 将当前队列中的所有节点向四周扩散 */
        for (int i = 0; i < sz; i++) {
            Node cur = q.poll();
            /* 划重点:这里判断是否到达终点 */
            if (cur is target)
                return step;
            /* 将 cur 的相邻节点加入队列 */
            for (Node x : cur.adj())
                if (x not in visited) {
                    q.offer(x);
                    visited.add(x);
                }
        }
        /* 划重点:更新步数在这里 */
        step++;
    }
}

结合项目的代码:

public int minDepth(TreeNode root) {
        if (root == null) return 0; //边界判断
        Queue<TreeNode> q = new LinkedList<>(); //BFS通常使用队列,每次将一个节点周围的节点加入队列
        q.offer(root); //根节点传入
        int depth = 1; //根节点算1层
        
        while(!q.isEmpty()) { //一直循环,直到找出最小深度/结束条件/框架中的target.
            int sz = q.size(); //BFS,广度优先搜索,这里横向遍历【某一层】的节点
            for (int i = 0; i < sz; i++) {
                TreeNode curr = q.poll();  //取出队首节点
                if (curr.left == null && curr.right == null) { //结束条件/框架中的target.
                    return depth;
                }
                if (curr.left != null) { //加入相邻的节点
                    q.offer(curr.left);
                }
                if (curr.right != null) { //同上
                    q.offer(curr.right);
                }
            }
            depth++; //一层遍历完后,层级自动+1
        }
        return -1;
    }

总结:
1.什么时候用BFS:常用场景是让你在一幅【图】中找到,从起点start到目标target的最近距离,比如此题,不过它的target不是形参,而是嵌入在代码中。
2.BFS是有可套用框架的。
3.BFS常用的数据结构是队列
4.BFS意思着重在横向

技术参考:labuladong

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值