方法一:递归
/**
* 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 maxDepth(TreeNode* root) {
if(!root) //结束递归的条件
return 0;
return max( maxDepth(root->left),maxDepth(root->right) )+1;
}
};
方法二:BFS
class Solution {
public:
int maxDepth(TreeNode* root) {
queue<TreeNode*> q;
int res=0;
if(!root) return res; //空树
q.push(root);
while(!q.empty()){
res++;
int n=q.size();
for(int i=0;i<n;i++){
TreeNode* top=q.front();
q.pop();
if(top->left)
q.push(top->left);
if(top->right)
q.push(top->right);
}
}
return res;
}
};
方法三:DFS
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
stack< pair<TreeNode* ,int> > st; //pair保存结点和该结点深度
int res=0;
int deep=0;
while(root || !st.empty()){
while(root){
st.push({root,++deep});
root=root->left;
}
root=st.top().first;
deep=st.top().second;
st.pop();
res=max(res,deep);
root=root->right;
}
return res;
}
};