LeetCode 111. 二叉树的最小深度

层序遍历的应用:
移步->LeetCode 111. 二叉树的最小深度
移步->LeetCode 104. 二叉树的最大深度
移步->LeetCode 102. 二叉树的层序遍历
移步->LeetCode 226. 翻转二叉树

题目链接-LeetCode 111. 二叉树的最小深度

递归法思路:
注意这里有一个陷阱。
在这里插入图片描述
上图,左子树为空,最小深度不是1而是2(红线部分)

定义最小深度是指根节点到叶子节点之间的距离,主要分为两种情况

  • 左子树空,右子树不空,返回右子树最小深度+1
  • 右子树空,左子树不空,返回左子树最小深度+1

最后返回其他情况,左右子树深度的最小值+1

 //递归
 class Solution{
     public int minDepth(TreeNode root){
         if(root==null) return 0;
         TreeNode left = root.left;
         TreeNode right = root.right;
         if(left == null && right!=null){
             return minDepth(right)+1;
         }
         if(left!=null && right==null){
             return minDepth(left)+1;
         }
         return Math.min(minDepth(left),minDepth(right))+1;
     }
 }

迭代法思路:
采用层序遍历,到当前节点时左右孩子均为空时,说明到达了最低点,返回深度即可。

class Solution {
    public int minDepth(TreeNode root) {
        int depth = 0;
        if(root == null) return depth;
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(root);
        while(!que.isEmpty()){
            int len = que.size();
            depth++;
            while(len>0){
                TreeNode curNode = que.poll();
                if(curNode.left==null&&curNode.right==null) return depth;
                if(curNode.left!=null) que.offer(curNode.left);
                if(curNode.right!=null) que.offer(curNode.right);
                len--;
            }
        }
        return depth;
    }

你可能感兴趣的:(#,LeetCode,leetcode,算法,二叉树,层序遍历)