111. 二叉樹的最小深度(***)

Mr_Curious_發表於2018-06-07
給定一個二叉樹,找出其最小深度。

最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定二叉樹 [3,9,20,null,null,15,7],

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

注意:它是到最近的葉子節點,要多考慮根節點

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null)
           return 0;

        int leftH  = minDepth(root.left);
        int rightH  = minDepth(root.right);

        if(leftH == 0 || rightH == 0)
            return leftH + rightH + 1;
        else
            return Math.min(leftH,rightH) + 1;
    }
}
class Solution {
    public int minDepth(TreeNode root) {
        if(root == null)
           return 0;
        int leftH = 0;
        if(root.left != null)
            leftH = minDepth(root.left);
        int rightH = 0;
        if(root.right != null)
            rightH = minDepth(root.right);

        if(leftH == 0)
            return rightH + 1;
        else if(rightH == 0)
            return leftH + 1;
        else
            return Math.min(leftH,rightH) + 1;
    }
}

和按行列印二叉樹一樣,噹噹前節點cur和last節點相同的時候,說明要換行了!

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null)
            return 0;       
        int res = 1;
        TreeNode nlast = null;
        TreeNode last = root;
        Queue<TreeNode> queue = new LinkedList();
        queue.offer(root);
        nlast = root;
        while(!queue.isEmpty()){
            TreeNode cur = queue.poll();           
            if(cur.left == null && cur.right == null )
                return res;

            if(cur.left != null){
                queue.offer(cur.left);
                nlast = cur.left;
            }
            if(cur.right != null){
                queue.offer(cur.right);
                nlast = cur.right;
            }
            if(cur == last){
                last = nlast;
                res++;
            }
        }
        return res;
    }
}

相關文章