Question
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. Similar to Question [Maximum Depth of Binary Tree], here we need to find the minimum depth instead.
https://oj.leetcode.com/problems/minimum-depth-of-binary-tree/
*Difficulty: Easy, Frequency: High
Recursion Solution
Depth-first Search(DFS). 左右child找到最小depth然后+1, base case是node是null return 0
O(n) runtime, O(log n) space
/**
* 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;
if(root.left == null) return minDepth(root.right)+1;
if(root.right == null) return minDepth(root.left)+1;
return Math.min(minDepth(root.right), minDepth(root.left))+1;
}
}
Breath-first Search Solution
use queue to iterate nodes from the top to the bottom, from left to right, find the first leaf then can know the min depth.
O(n) runtime, O(n) space
good for highly unbalanced tree
/**
* 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> q = new LinkedList<>();
q.add(root);
int depth = 1;
TreeNode rightMost = root;
while(!q.isEmpty()){
TreeNode node = q.poll();
if(node.left == null && node.right == null) break;
//the following order matters
if(node.left != null) q.add(node.left);
if(node.right != null) q.add(node.right);
if(node == rightMost){//have iterate the whole layer
depth++;
rightMost = (node.right != null) ? node.right : node.left;
}
}
return depth;
}
}