public int minDepth(TreeNode root) {//1ms
if(root == null)
return 0;
if ((root.left == null) &&(root.right == null))
return 1;
int minDepth = Integer.MAX_VALUE;
if(root.left!=null){
minDepth = Math.min(minDepth(root.left),minDepth);
}
if(root.right!=null){
minDepth = Math.min(minDepth(root.right),minDepth);
}
return minDepth+1;
}
优化递归
public int minDepth(TreeNode root) {//1ms
if(root == null)
return 0;
if ((root.left == null) &&(root.right == null))
return 1;
int minDepth = Integer.MAX_VALUE;
if(root.left!=null){
minDepth = Math.min(minDepth(root.left),minDepth);
}
if(root.right!=null){
minDepth = Math.min(minDepth(root.right),minDepth);
}
return minDepth+1;
}
深度优先遍历,每个节点必须遍历到
import javafx.util.Pair;
class Solution {
public int minDepth(TreeNode root) {//4ms
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;
}
}
广度优先遍历,不需要每个节点遍历
import javafx.util.Pair;
class Solution {
public int minDepth(TreeNode root) {//2ms
LinkedList<Pair<TreeNode, Integer>> stack = new LinkedList<>();
if (root == null) {
return 0;
}
else {
stack.add(new Pair(root, 1));
}
int current_depth = 0;
while (!stack.isEmpty()) {
Pair<TreeNode, Integer> current = stack.poll();
root = current.getKey();
current_depth = current.getValue();
if ((root.left == null) && (root.right == null)) {
break;
}
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 current_depth;
}
}