1.递归法1
比较左右子树的深度,返回深度较大值
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root){
return max(maxDepth(root->left),maxDepth(root->right))+1;
}
return 0;
}
};
2.递归法2
借助一个变量max,每次都叶子结点都比较一下深度是否比max大
class Solution {
private:
void maxDepth(TreeNode* root,int &max,int cnt){
if(root==NULL){
if(cnt>max){
max=cnt;
}
return ;
}
maxDepth(root->left,max,cnt+1);
maxDepth(root->right,max,cnt+1);
}
public:
int maxDepth(TreeNode* root) {
int max=0;
maxDepth(root,max,0);
return max;
}
};
3.借助队列,结合层次遍历
class Solution {
public:
int maxDepth(TreeNode* root) {
int cnt=0;
queue<TreeNode*>q;
if(root)q.push(root);
while(!q.empty()){
int s=q.size();
cnt++;
while(s--){
TreeNode*node=q.front();
q.pop();
if(node->left)q.push(node->left);
if(node->right)q.push(node->right);
}
}
return cnt;
}
};