問題解決のアイデア:
(1)再帰を使用する
(2)ノードの最小の高さは、左右のサブツリーの最小の高さ+ 1であることに注意してください。
(3)サブツリーの1つの高さが0の場合、他のサブツリーの高さ+ 1がノードの最小の高さになることに注意してください。
/**
* 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 dfs(root);
else return 0;
}
private:
int dfs(TreeNode* node) {
int l = node->left ? dfs(node->left) : 0;
int r = node->right ? dfs(node->right) : 0;
if (l==0) return r+1;
if (r==0) return l+1;
else return min(l,r)+1;
}
};