正常的做法是dfs,一个一个遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void dfs(TreeNode* n, int& ans, int layer)
{
if(!n)return;
if(layer > ans)ans = layer;
dfs(n->left, ans, layer+1);
dfs(n->right, ans, layer+1);
}
int maxDepth(TreeNode* root) {
if(!root)return 0;
int ans = 1;
dfs(root, ans, 1);
return ans;
}
};
更快的做法是递归,求解子问题,很强。
重点是真的快,常数项很少。
一般这种题适合子问题的输入也只有一个的时候,如果有两个,比如对称二叉树问题,就不适用。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root)return 0;
return max(maxDepth(root->left), maxDepth(root->right))+1;
}
};