原题
链接:https://leetcode.com/problems/minimum-depth-of-binary-tree/
解题概览
需要注意的是这里的最小深度指的是根节点到叶节点的深度,例如对于二叉树[1, 2],最小深度为2而不是1!
解法1:递归;
解法2:广度优先遍历
解法1
解题思路
最小深度为左右子树的最小深度中较小的那个值+1
代码
public class Solution111_recursive {
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.left), minDepth(root.right)) + 1;
}
}
解法2
解题思路
参见
LeetCode题解-104-Maximum Depth of Binary Tree,只不过这里为最小深度,如果在层级便利的时候发现某个叶子节点左右子树均为空,那么便已找到最小深度值。
代码
public class Solution111_BFS_iterator {
public int minDepth(TreeNode root) {
int minDepth = 0;
Deque<TreeNode> deque = new LinkedList<TreeNode>();
if (root != null)
deque.push(root);
while (!deque.isEmpty()){
int dequeSize = deque.size();
minDepth++;
while (dequeSize-- > 0){
TreeNode currentNode = deque.pop();
if (currentNode.left == null && currentNode.right == null)
return minDepth;
if (currentNode.left != null)
deque.addLast(currentNode.left);
if (currentNode.right != null)
deque.addLast(currentNode.right);
}
}
return minDepth;
}
}