【深基16.例3】二叉树深度 - 洛谷
思路这道题可以用bfs遍历数,每向下遍历一层,层数level就增加1,以此类推,最后输出最后一层的深度即可!
拆代码1. 准备工作:准备结构体,存储左右儿子和层数
#includeusing namespace std; struct node{ int l,r; //左右儿子的下标 int level;//层次 }; node tree[1000010]; queue q; int ans=0;
2. 输入 :结构体输入,tree第一层层数初始化为1,队列push进去。
int main(){
int m;//节点数
cin>>m;
for(int i=1;i<=m;i++) cin>>tree[i].l>>tree[i].r;
tree[1].level=1; //手动初始化根节点层级
q.push(tree[1]);
3. 广搜bfs,具体看注释
while(!q.empty()){
node tmp=q.front();
if(tmp.l!=0){ //当还有左儿子
tree[tmp.l].level=tmp.level+1; //层数+1
q.push(tree[tmp.l]);
ans=max(ans,tmp.level+1); //求层数
}
//和左儿子一样
if(tmp.r!=0){
tree[tmp.r].level=tmp.level+1;
q.push(tree[tmp.r]);
ans=max(ans,tmp.level+1);
}
//记得这一步
q.pop();
}
AC代码
#includeusing namespace std; struct node{ int l,r; //左右儿子的下标 int level;//层次 }; node tree[1000010]; queue q; int ans=0; int main(){ int m;//节点数 cin>>m; for(int i=1;i<=m;i++) cin>>tree[i].l>>tree[i].r; tree[1].level=1; //手动初始化根节点层级 q.push(tree[1]); while(!q.empty()){ node tmp=q.front(); if(tmp.l!=0){ tree[tmp.l].level=tmp.level+1; q.push(tree[tmp.l]); ans=max(ans,tmp.level+1); } if(tmp.r!=0){ tree[tmp.r].level=tmp.level+1; q.push(tree[tmp.r]); ans=max(ans,tmp.level+1); } q.pop(); } cout<
拜~



