7-7 列出叶结点 (25 分)
点击查看题目
#include <bits/stdc++.h> using namespace std; int n;//n个结点 int vis[10];//检测数组位置有没有被遍历过 struct btnode { int l = -1; int r = -1; } bt[10];//树,-1代表为叶子(默认为-1) vector<int> ans[100];//关键可变数组(用数组一样) /* *可变数组作用:实现题目要求输出顺序 *解释:每次函数传入的cnt本质上是树的深度, *而ans[cnt]自然代表第cnt深度符合条件的叶子结点。 */ void bfs(int k,int cnt)//注:不是bfs,写习惯了 { if(bt[k].l==-1&&bt[k].r==-1) { ans[cnt].push_back(k); return; } if(bt[k].l!=-1){ bfs(bt[k].l,cnt+1); } if(bt[k].r!=-1){ bfs(bt[k].r,cnt+1); } } int main() { memset(vis, 0, sizeof vis);//重置visited数组 cin >> n; for (int i = 0; i < n; i++) { char a; char b; cin >> a >> b; if (a != '-') { bt[i].l = a-'0'; vis[bt[i].l]=1; } if (b != '-') { bt[i].r = b-'0'; vis[bt[i].r] = 1; } } int root=0;//代表根节点 for (int i = 0; i < n; i++)//寻找根节点 { if (vis[i] == 0) { root = i; break; } } bfs(root,0); int flag=0; for(int j=0;j<n;j++) { for(int i=0;i<ans[j].size();i++) { if(flag==0) { flag=1; } else cout<<" "; cout<<ans[j][i]; } } return 0; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15724141.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步