求:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
解:
思路:与求二叉树的最大深度类似问题,最直接的方法都是递归求解,但是实现略有区别。
1、对每个节点而言,深度为左右子树深度的较小者+1(求最大深度是左右子树深度的较大者+1)
2、空节点应该返回INT_MAX(求最大深度时返回的是0),如果此处返回0,当一个节点某个子树为空,另一个子树非空时,计算得到的深度为1,显然不符合题目要求。(应该是2)
3、根节点要做特殊处理,如果根节点为空,返回INT_MAX显然不合理,此处直接返回0。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
int
min(
int
x,
int
y){
return
x<y?x:y;
}
int
GetDepth(
struct
TreeNode* root){
if
(root==NULL)
return
INT_MAX;
if
(root->left == NULL && root->right == NULL)
return
1
;
return
min(GetDepth(root->left), GetDepth(root->right)) +
1
;
}
int
minDepth(
struct
TreeNode* root){
if
(root == NULL)
return
0
;
return
GetDepth(root);
}
来源:oschina
链接:https://my.oschina.net/u/4469818/blog/4284167