树
2021/9/5 23:10:08
本文主要是介绍树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
树
建树
题目详情 (pintia.cn)
#include<iostream> #include<cstdio> #include<cstdlib> #include<set> #include<vector> #define rep(i,x,y) if ((x)<=(y)) for (register int i=(x);i<=(y);i++) using namespace std; struct node{ int data; node *l; node *r; int level; }; int in[100],pre[100]; bool vis[100]; vector <int> ans; node* createtree(int prel,int pren,int inl,int inn) { int k,ini=0; if (prel>pren) return NULL; node* root =(node*)malloc(sizeof(struct node)); for (ini=inl;ini<=inn;ini++) if (in[ini]==pre[prel]) break; k=ini-inl; root->data=in[ini]; root->l=createtree(prel+1,prel+k,inl,ini-1); root->r=createtree(prel+k+1,pren,ini+1,inn); return root; } void cal(node* root) { if (root->l!=NULL) { root->l->level=root->level+1; if (!vis[root->l->level]) ans.push_back(root->l->data); vis[root->l->level]=true; cal(root->l); } if (root->r!=NULL) { root->r->level=root->level+1; if (!vis[root->r->level]) ans.push_back(root->r->data); vis[root->r->level]=true; cal(root->r); } } int main() { int n; cin>>n; rep(i,1,n) scanf("%d",&in[i]); rep(i,1,n) scanf("%d",&pre[i]); node* root = createtree(1,n,1,n); ans.push_back(root->data); cal(root); cout<<ans[0]; rep(i,1,ans.size()-1) cout<<' '<<ans[i]; return 0; }
这篇关于树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南