111. Minimum Depth of Binary Tree(C语言)
求一个二叉树的最小深度
题目
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 1:
Input: root = [3,9,20,null,null,15,7]
Output: 2
Example 2:
Input: root = [2,null,3,null,4,null,5,null,6]
Output: 5
Constraints:
The number of nodes in the tree is in the range [0, 105].
-1000 <= Node.val <= 1000
解答
递归方法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int Tra(struct TreeNode* root)
{
if(root == NULL)
return 0;
int left_min = Tra(root->left);
int right_min = Tra(root->right);
if(left_min == 0 && right_min > 0)
return right_min+1;
if(left_min > 0 && right_min == 0)
return left_min+1;
return left_min <= right_min ? (left_min+1) : (right_min+1);
}
int minDepth(struct TreeNode* root){
return Tra(root);
}
总结
这个题与“求二叉树的最大深度”相似,但区别和陷阱在于:当深度为0时,不能直接参与深度比较。举个例子,如果一个节点的左节点深度为0,右节点深度为1时,该节点的深度应该是1+1,而不是0+1。