一、题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
二、解决
1、分治
思路:
这里利用分治,不断往左右子树递归,直到遇到叶子节点,记录并更新树最小深度。最直接可以直接看版本1,比较简单清晰。然后附一下分治模板,以便理解。
DFS模板:
voidDFS ( Vertex V )
{
visited[V] = true;
for( V 的每个邻接点W )
if( !visited[W] )
DFS( W );
}
分治模板:
private static int divide_conquer(Problem problem) {
// terminator
if (problem == NULL) {
int res = process_last_result();
return res;
}
// process current logic:split the big problems
subProblems = split_problem(problem)
// drill down:conquer subproblems, merge subresults
res0 = divide_conquer(subProblems[0])
res1 = divide_conquer(subProblems[1])
result = process_result(res0, res1);
// revert the current level states