minDepth

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

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

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

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / 
  9  20
    /  
   15   7
返回它的最小深度  2.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
// 递归
class Solution {
    public int minDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        if(root.left == null && root.right == null){
            return 1;
        }
        int min = Integer.MAX_VALUE;
        if(root.left != null){
            min = Math.min(minDepth(root.left), min);
        }
        if(root.right != null){
            min = Math.min(minDepth(root.right), min);
        }
        return min + 1;
    }
}
// 迭代
public int minDepth(TreeNode root) {
       Queue<Pair<TreeNode, Integer>> queue = new LinkedList<>();
       if (root == null) {
           return 1;
       } else {
           queue.add(new Pair<>(root, 1));
       }
       int cnt = 0;
       while (!queue.isEmpty()) {
           Pair<TreeNode, Integer> t = queue.poll();
           TreeNode t1 = t.getKey();
           cnt = t.getValue();
           if (t1 != null) {
               queue.add(new Pair<>(t1.left, cnt + 1));
               queue.add(new Pair<>(t1.right, cnt + 1));
               if (t1.left == null && t1.right == null) {
                   break;
               }
           }
       }
       return cnt;
   }
原文地址:https://www.cnblogs.com/athony/p/13055645.html