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.
设f(n)表示以n为根节点的二叉树的最小深度,那么状态转移方程:f(n) = min{ f(n->left) , f(n->right) } + 1/**
* Definition for binary tree
* 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;
if (!root->left && !root->right) return 1; // leaf node
int val = INT_MAX;
if (root->left) val = min(val, minDepth(root->left));
if (root->right) val = min(val, minDepth(root->right));
return val + 1;
}
};实现的时候注意,如果节点n非叶子节点,则需加上最小的子节点的值。即,假如n->left为空而n->right非空,则不可认为n->left是一个“最小节点长度为0”的子树,因为空指针所代表的树没有叶子节点(左右子树均空的节点),因此此时f(n->left)并非f(n)的一个子问题,因此不能直接按状态转移方程直接递归。
本文详细介绍了如何使用递归方法求解二叉树的最小深度,包括状态转移方程的应用、边界条件处理及避免无效递归的方法。
470

被折叠的 条评论
为什么被折叠?



