二叉树的最小深度-力扣111

121 阅读1分钟

二叉树的最小深度-力扣111

广度优先遍历BFS整棵树,即一层一层的检查。第一个检查出存在叶子结点的层的深度即为这棵二叉树的最小深度。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:

    int minDepth(TreeNode* root) {
        if(!root){
            return 0;
        }

        queue<TreeNode*> q;
        q.push(root);

        int currentLevelSize = 0; //记录当前层的结点数量
        int currentLevelNum = 0; //记录当前是第几层

        TreeNode* p; //追踪当前结点

        while(!q.empty()){
            currentLevelNum ++;
            currentLevelSize = q.size(); //获取当前层的结点数量
            
            for(int i = 0; i < currentLevelSize; i ++){
                p = q.front();q.pop(); //当前层的第一个元素出队
                // 如果当前结点没有左右儿子,则为叶子结点,输出当前层的深度即可
                if(!p->left && !p->right) return currentLevelNum;

                if(p->left) q.push(p->left);
                if(p->right) q.push(p->right);
            }

        }

        return currentLevelNum;
    }
};