leecode 111. 二叉树的最小深度

111. 二叉树的最小深度

leecode 111. 二叉树的最小深度

        递归:注意:和二叉树的最大深度不同,并不是直接将最大值变为最小值,最后的节点左右子节点应都为空才是最小深度,只有一边为空的时候不是最小节点,需要向另一个节点延伸,直到找到左右子节点都为空的时候结束。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */

递归:

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

迭代:套用层序遍历的经典模板。

class Solution {
    public int minDepth(TreeNode root) {
        Deque<TreeNode> deque = new LinkedList<>();
        if (root == null) return 0;
        deque.offer(root);
        int depth = 0;
        while (!deque.isEmpty()) {
            int size = deque.size();
            depth++;
            for (int i = 0; i < size; i ++) {
                TreeNode node = deque.poll();
//当前节点左右子节点都为空,即当前节点是最后一个节点的时候,说明其就是最小值。
                if (node.left == null && node.right == null) {
                    // 是叶子结点,直接返回depth,因为从上往下遍历,所以该值就是最小值
                    return depth;
                }
                if (node.left != null) deque.offer(node.left);
                if (node.right != null) deque.offer(node.right);
            }
        }
        return depth;
    }
}

上一篇:运行java程序的时候出现Exception in thread "main" java.lang.UnsupportedClassVersionError:


下一篇:laravel 未登录不能通过 输入url访问后台