题目:
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Note: A leaf is a node with no children.Example:
Given binary tree [3,9,20,null,null,15,7],3 / \ 9 20 / \ 15 7
return its minimum depth = 2.
解释:
返回二叉树的最小的深度。应该用dfs做,先求出左右两个子树的最小深度,如果左右子树的深度中有一个是0
或者两个都是0
,返回1+left+right
(也就是1+深度不为0的子树的深度),注意,一个叶子节点的深度是1。
python代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
left=self.minDepth(root.left)
right=self.minDepth(root.right)
if left==0 or right==0:
return left+right+1
return 1+min(left,right)
c++代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int minDepth(TreeNode* root) {
if (! root)
return 0;
int left=minDepth(root->left);
int right =minDepth(root->right);
if(!left ||!right)
return 1+left+right;
return 1+min(left,right);
}
};
总结:
注意这里和一般的dfs的解法不一样,需要先进dfs,再对dfs之后的结果做判断。