AcWing 71. 二叉树的深度 专挑麻烦的写 bfs的层数与dfs全局最深 AC_any
原题链接
简单
作者:
AC_any
,
2021-04-19 18:00:20
,
所有人可见
,
阅读 534
dfs记录当前层,遇到叶子更新全局最大层数
class Solution {
public:
int ans=1;
int treeDepth(TreeNode* root) {
if(!root) return 0;
dfs(root,0);
return ans;
}
void dfs(TreeNode* r,int lev){
if(!r){
ans=max(lev,ans);
return;
}
dfs(r->left,lev+1);//写成lev++,需要恢复现场
dfs(r->right,lev+1);
}
};
bfs 每次都把上一层弹出
class Solution {
public:
int treeDepth(TreeNode* root){
if(!root) return 0;
queue<TreeNode*> q;
q.push(root);
int lev=0;
while(!q.empty()){
TreeNode* tail=q.back(),*head;//记录上一层的末尾
while(!q.empty()){
head=q.front();q.pop();
if(head->left) q.push(head->left);
if(head->right) q.push(head->right);
if(head==tail) break;//此时上一层都已经出队
}
lev++;
}
return lev;
}
};