自学内容网 自学内容网

力扣111 二叉树的最小深度 Java版本


题目描述

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

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

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

示例 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

层序遍历解法

class Solution {
    //求二叉树的最小深度
    public int minDepth(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        if (root==null){
            return 0;
        }
        int depth = 0;
        queue.offer(root);
        while (!queue.isEmpty()){
            depth++;
            int size = queue.size();
            //这里要单独开一个循环,size就是代表这一层有多少个节点。这样区分层之后可以给depth加一
            while (size>0){
                TreeNode node = queue.poll();
                //如果当前节点为叶子节点,相当于直接找到了最小深度
                if (node.left==null&&node.right==null){
                    return depth;
                }
                if (node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
                size--;
            }

        }
        return depth;
    }
}

递归解法

class Solution {
    //求二叉树的最小深度
    public int minDepth(TreeNode root) {
        //使用递归的方法来解决
        //递归出口
        if (root==null){
            return 0;
        }
        //需要判断一下是否只有一个子树。如果当前节点只有一个孩子节点,直接用下面这一行代码的话,并不会沿着路径往下找,会直接返回当前的深度
        //return Math.min(minDepth(root.left),minDepth(root.right))+1;
        if (root.right==null){
            return minDepth(root.left)+1;
        }
        if (root.left==null){
            return minDepth(root.right)+1;
        }

        //左右子树都不为空
        return Math.min(minDepth(root.left),minDepth(root.right))+1;

    }
}

原文地址:https://blog.csdn.net/m0_47066863/article/details/136372602

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!