题目:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回它的最小深度 2.
解题思路:
使用深度优先遍历或者广度优先遍历找到最小高度。
代码实现:
BFS:
/** * 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; if (root.right == null) return minDepth(root.left) + 1; return Integer.min(minDepth(root.left), minDepth(root.right)) + 1; } }
DFS:
/** * 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; Queue<TreeNode> queue = new LinkedList<TreeNode>(); int height = 0; queue.offer(root); while (!queue.isEmpty()) { height ++; for (int i = queue.size() - 1; i >= 0; i --) { TreeNode p = queue.poll(); if (p.left == null && p.right == null) return height; if (p.left != null) queue.offer(p.left); if (p.right != null) queue.offer(p.right); } } return height; } }