给定一个二叉树,找出其最小深度。
    最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
    深度优先、广度优先

    1. public class TreeDeep {
    2. static class TreeNode {
    3. int val;
    4. TreeNode left;
    5. TreeNode right;
    6. int deep;
    7. public TreeNode(int val, TreeNode left, TreeNode right) {
    8. this.val = val;
    9. this.left = left;
    10. this.right = right;
    11. }
    12. }
    13. public static void main(String[] args) {
    14. TreeNode node7 = new TreeNode(7, null, null);
    15. TreeNode node6 = new TreeNode(6, node7, null);
    16. TreeNode node5 = new TreeNode(5, null, null);
    17. TreeNode node4 = new TreeNode(4, null, null);
    18. TreeNode node3 = new TreeNode(3, node6, null);
    19. TreeNode node2 = new TreeNode(2, node4, node5);
    20. TreeNode node1 = new TreeNode(1, node2, node3);
    21. System.out.println(minDepth(node1));
    22. System.out.println(minDepth2(node1));
    23. }
    24. //深度优先
    25. private static int minDepth(TreeNode root) {
    26. if (root == null) {
    27. return 0;
    28. }
    29. if (root.left == null && root.right == null) {
    30. return 1;
    31. }
    32. int min = Integer.MAX_VALUE;
    33. if (root.left != null) {
    34. min = Math.min(minDepth(root.left), min);
    35. }
    36. if (root.right != null) {
    37. min = Math.min(minDepth(root.right), min);
    38. }
    39. return min + 1;
    40. }
    41. //广度优先
    42. private static int minDepth2(TreeNode root) {
    43. if (root == null) {
    44. return 0;
    45. }
    46. Queue<TreeNode> queue = new LinkedList();
    47. root.deep = 1;
    48. queue.offer(root);
    49. while (!queue.isEmpty()) {
    50. TreeNode node = queue.poll();
    51. if (node.left == null && node.right == null) {
    52. return node.deep;
    53. }
    54. if (node.left != null) {
    55. node.left.deep = node.deep + 1;
    56. queue.offer(node.left);
    57. }
    58. if (node.right != null) {
    59. node.right.deep = node.deep + 1;
    60. queue.offer(node.right);
    61. }
    62. }
    63. return 0;
    64. }
    65. }