之前看别人blog时,发现写在注释里的一句话:dfs优先考虑递归,bfs优先考虑队列。
这不,今儿个就用上了。
1.bfs
这里队列while里面也可以创建新的临时队列,然后重新赋给原始队列。
/**
* 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) {
//层序遍历
queue<TreeNode*> q;
q.push(root);
int ans=0;
if(!root){
return 0;
}
while(!q.empty()){
ans++;
for(int i=q.size();i>0;i--){
if(q.front()->left){
q.push(q.front()->left);
}
if(q.front()->right){
q.push(q.front()->right);
}
q.pop();
}
}
return ans;
}
};
2.dfs(看的力扣题目评论区,一行代码直接递归,我人傻了
/**
* 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) {
return root==NULL?0:max(maxDepth(root->left),maxDepth(root->right))+1;
}
};