Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Note: A leaf is a node with no children.
Example 1:
Input: root = [3,9,20,null,null,15,7]
Output: 2
Example 2:
Input: root = [2,null,3,null,4,null,5,null,6]
Output: 5
Constraints:
- The number of nodes in the tree is in the range [0, 105].
- -1000 <= Node.val <= 1000
Java Completion:
/**
* 递归实现
*/
class Solution {
public int minDepth(TreeNode root) {
if (root == null) return 0;
int depth = 0;
int left = minDepth(root.left);
int right = minDepth(root.right);
if (left != 0 && right != 0) depth = Math.min(left, right);
if (left == 0 || right == 0) depth = Math.max(left, right);
return depth + 1;
}
}
/**
* 非递归实现
*/
class Solution {
public int minDepth(TreeNode root) {
if (root == null) return 0;
Queue<TreeNode> stack = new LinkedList<>();
stack.offer(root);
int depth = 0;
TreeNode rightMost = root;
while (!stack.isEmpty()) {
TreeNode poll = stack.poll();
if (poll.left == null && poll.right == null) break;
if (poll.left != null) stack.offer(poll.left);
if (poll.right != null) stack.offer(poll.right);
if (poll == rightMost) {
depth++;
rightMost = poll.right == null ? poll.left : poll.right;
}
}
return depth;
}
}