题目:二叉树的最小深度
Description
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
Sample
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
Solution
简单题!遍历二叉树即可!因为是寻找最小深度,所以如果根节点为空的话,返回0,否则,如果根节点的左孩子和右孩子都为空,返回1。
当一棵树的根节点左孩子为空,右孩子不为空时,并不是从左孩子那里返回一个0,然后整棵树的最小深度就是1。并不是的!因为很显然根节点左孩子为空,右孩子不为空,那么只有在根节点的右孩子中才能找到叶子节点,这个树的最小深度是右子树的最小深度加1。
根节点左孩子不为空,右孩子为空时。同理 !
由此我们递归求解即可!
AC Code
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==NULL) return 0;//根节点为空
else if(root->left==NULL&&root->right==NULL) return 1;//根节点的左孩子和右孩子都为空
else if(root->left&&root->right==NULL) return minDepth(root->left)+1;//根节点左孩子不为空,右孩子为空
else if(root->left==NULL&&root->right) return minDepth(root->right)+1;//根节点左孩子为空,右孩子不为空
else{//根节点左右孩子都不为空
int dep=min(minDepth(root->left),minDepth(root->right))+1;
return dep;
}
}
};