【Leetcode】111. Minimum Depth of Binary Tree

来源:互联网 发布:ubuntu解压rar文件 编辑:程序博客网 时间:2024/06/11 03:38

方法一:递归

思路:

(1)若树为空,直接返回0。

(2)若左子树为空,则返回右子树的最小深度+1。

(3)若右子树为空,则返回左子树的最小深度+1。

(4)否则,返回左子树的最小深度和右子树的最小深度的较小值+1。

注意:需要特殊考虑一边子树为空的情况。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public int minDepth(TreeNode root) {        if (root == null)            return 0;        else if (root.left == null)            return minDepth(root.right) + 1;        else if (root.right == null)            return minDepth(root.left) + 1;        return Math.min(minDepth(root.left), minDepth(root.right)) + 1;    }}

Runtime:1ms


方法二:非递归

思路:

(1)若树为空,直接返回0。

(2)创建一个队列queue,用于存放所有节点,把根节点加入队列,用minDepth记录最小高度。

(3)遍历队列,队列里的节点正是当前层得到节点,队列长度正是当前层的节点个数,遍历当前层的所有节点。若其左右孩子均为空,则返回maxDepth;若其左孩子不为空,则左孩子加入队列,若其右孩子不为空,则右孩子加入队列。注意每一层处理时需要先把队列长度保存在变量中,否则内层循环会导致队列长度递减。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public int minDepth(TreeNode root) {        if (root == null)            return 0;        Queue<TreeNode> queue = new LinkedList<TreeNode>();        queue.add(root);        int minDepth = 1;        while (!queue.isEmpty()) {            int size = queue.size();            for (int i = 0; i < size; i++) {                TreeNode node = queue.poll();                if (node.left == null && node.right == null)                     return minDepth;                 if (node.left != null)                    queue.add(node.left);                if (node.right != null)                    queue.add(node.right);            }            minDepth++;        }        return minDepth;    }}
Runtime:1ms
1 0
原创粉丝点击