问题描述:
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.
查找根到最近的叶子的最短路径(其实是节点个数)
思路:用递归写,从上到下。分四种情况
(1)根节点=null。返回0
(2)根节点!=null, 但左右孩子均为null。返回1
(3)根节点!=null,左孩子=null,右孩子!=null,返回以右孩子为参数的递归式+1
(4)类似(3),右孩子=null,返回以左孩子为参数的递归式+1
(5)左右孩子都存在,返回分别以左右孩子为根节点的递归式中更小的+1
代码如下:
class Solution {
public int minDepth(TreeNode root) {
if (root==null) return 0;
else{
if ((root.left==null)&&(root.right!=null)) return minDepth(root.right)+1;
else if ((root.left!=null)&&(root.right==null)) return minDepth(root.left)+1;
else if ((root.left==null)&&(root.right==null)) return 1;
else return Math.min(minDepth(root.left), minDepth(root.right))+1;
}
}
}
时间复杂度: O(n),每个节点过一遍
也可以用BFS深度优先搜索,用栈数据结构来存储 “节点 深度” 对
class Solution {
public int minDepth(TreeNode root) {
LinkedList<Pair<TreeNode,Integer>> stack = new LinkedList<>();
if (root==null) return 0;
else stack.add(new Pair(root,1));
int min_depth = Integer.MAX_VALUE;
while (!stack.isEmpty()){
Pair<TreeNode, Integer> current = stack.pollLast();
root = current.getKey();
int current_depth = current.getValue();
if ((root.left==null) && (root.right==null)){
min_depth = Math.min(min_depth, current_depth);
}
if (root.left!=null){
stack.add(new Pair(root.left, current_depth+1));
}
if (root.right!=null){
stack.add(new Pair(root.right, current_depth+1));
}
}
return min_depth;
}
}