给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回它的最小深度 2.
这道题不难,如果是单纯求二叉树深度就更简单了,这道题要求的是最小深度,所以我们只需要考虑如下两种情况即可:
1:左右子树都不为空的情况下(节点1),则取左右子树最浅的深度+1即可:
min(left, right) + 1
2:左右子树至少有一个为空(节点2),则按照正常求最大深度来解:
max(left, right) + 1
代码如下:
int minDepth(TreeNode* root) {
if (!root) {
return 0;
}
int left = minDepth(root->left);
int right = minDepth(root->right);
if (left && right) {
return min(left, right) + 1;
}
else {
return max(left, right) + 1;
}
}