哎,好难受!!!
看不懂,学不会,不会做
本来我以为直接将求深度的代码改为求最小值就好了,于是我又开始了我的幼稚且菜狗的代码编写:
public int minDepth(TreeNode root) {
dfs(root);
return min;
}
int min=Integer.MAX_VALUE;;
int n=0;
void dfs(TreeNode root){
if(root==null){
if(min>n){
min=n;
}
return;
}
n++;
dfs(root.left);
dfs(root.right);
n--;
}
于是又又又错了,一直为1,于是我又开始寻找原因:
我发现当走到第一层的时候,值就已经为1,之后的值就一直维持了这个
于是我又继续想啊~想~
然后我又屈服于我的智商,看了题解:
当左右节点有一个其中不为null的时候,那么就说明,最小深度在不为bull的那一边。
所以返回1+本层的深度
public int minDepth(TreeNode root) {
return dfs(root);
}
int min=Integer.MAX_VALUE;;
int n=0;
int dfs(TreeNode root){
if(root==null){
return 0;
}
int l=dfs(root.left);
int r=dfs(root.right);
if(root.left!=null&&root.right==null){
return 1+l;
}
if(root.left==null&&root.right!=null){
return 1+r;
}
return 1+Math.min(l,r);
}
这玩意还是得自己慢慢体会。。。
还是我的层序遍历好用,嘿嘿~
public int minDepth(TreeNode root) {
Queue<TreeNode> dui=new LinkedList<>();
int size=0;
TreeNode p=null;
if(root!=null){
dui.offer(root);
}else{
return 0;
}
int ans=0;
while(!dui.isEmpty()){
size=dui.size();
ans++;
for(int i=0;i<size;i++){
p=dui.poll();
//第一次左右节点为空时,就是最小深度
if(p.left==null&&p.right==null){
return ans;
}
if(p.left!=null){
dui.offer(p.left);
}
if(p.right!=null){
dui.offer(p.right);
}
}
}
return ans;
}