111. 二叉树的最小深度(层次遍历—使用队列迭代)

111. 二叉树的最小深度

题目链接: 111. 二叉树的最小深度(简单)

题目描述

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示:

  • 树中节点数的范围在 [0, 105]

  • -1000 <= Node.val <= 1000

题解

思路:二叉树的深度就是它的层数,此题要求的是二叉树的最小深度,通过分析可以发现:当一个节点的左右孩子都为空时(该节点为叶子节点),最达到最小深度了。

代码(C++):

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode* next;
    TreeNode(int value) : val(value), left(nullptr), right(nullptr), next(nullptr) {}
};
​
class Solution {
public:
    int minDepth(TreeNode* root) {
        queue<TreeNode*> que;
        if (root != nullptr) que.push(root);
        int minlevel = 1;
        while (!que.empty()) {
            int size = que.size();
            for (int i = 0; i < size; i++) {
                TreeNode* node = que.front();
                que.pop();
                if (node->left == nullptr && node->right == nullptr) return minlevel;
                if (node->left) que.push(node->left);
                if(node->right) que.push(node->right);
            }
            minlevel += 1;
        }
        return minlevel - 1;
    }
};

代码(Java):

class Solution {
    public int minDepth(TreeNode root) {
        Deque<TreeNode> que = new LinkedList<>();
        if (root != null) que.offer(root);
        int minlevel = 1;
        while (!que.isEmpty()) {
            int size = que.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = que.poll();
                if (node.left == null && node.right == null) return minlevel;
                if (node.left != null) que.offer(node.left);
                if (node.right != null) que.offer(node.right);
            }
            minlevel += 1;
        }
        return minlevel - 1;
    }
}

分析:

  • 时间复杂度:O(N)

  • 空间复杂度:O(N)

posted @ 2021-11-28 11:26  wltree  阅读(63)  评论(0编辑  收藏  举报