https://www.bilibili.com/video/av46402848/
考虑的方面要谨慎
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int minDepth(TreeNode root) { if(root==null) return 0; if(root.left==null) return minDepth(root.right)+1; //!!!!!关键 左子树为null 就看 右子树 if(root.right==null) return minDepth(root.left)+1; //!!!!!关键 右子树为null 就看 左子树 int left = minDepth(root.left) +1; int right = minDepth(root.right) +1; return Math.min(left,right); //!!!!!关键 } }
用链表实现 层次遍历
class Solution { public int minDepth(TreeNode root) { int res = 0; if (root == null) return res; LinkedList ll = new LinkedList(); ll.add(root); while (!ll.isEmpty()) { int size = ll.size(); res++; // 要用两个while 的原因主要是增加层作用 while (size > 0) { TreeNode temp = ll.poll(); if (temp.left == null && temp.right == null) return res; if (temp.right != null) ll.add(temp.right); if (temp.left != null) ll.add(temp.left); size--; } } return res; } }