PAT A1099
2018-06-17 22:11:27来源:未知 阅读 ()
https://www.patest.cn/contests/pat-a-practise/1099
题意大概:
给定一棵BST的节点数,树的结构,以及各个节点的权值,求此树层次遍历的结果
解题思路:
1.使用孩子兄弟法存储输入数据
2.对各个节点的权值进行排序
3.通过中序遍历可以得到各节点从小到大的的有序权值。这里通过中序遍历对结构体重的权值进行赋值(构建BST)
4.通过层次遍历获取结果
5.根据题目要求,格式化输出结果。
1 #include<iostream> 2 #include<algorithm> 3 #include<queue> 4 using namespace std; 5 const int mmax=101; 6 struct node{ 7 int l,r; 8 int data; 9 }tree[mmax]; 10 11 int num; 12 void midtrv(int root,int val[]) 13 { 14 if(root!=-1) 15 { 16 midtrv(tree[root].l,val); 17 tree[root].data=val[num]; 18 num++; 19 midtrv(tree[root].r,val); 20 } 21 } 22 23 queue<int> myqueue; 24 int val[mmax]; 25 void leveltrv(int root) 26 { 27 num=0; 28 if(root!=-1) 29 { 30 myqueue.push(root); 31 while(!myqueue.empty()) 32 { 33 int t=myqueue.front(); 34 myqueue.pop(); 35 val[num++]=tree[t].data; 36 if(tree[t].l!=-1) 37 myqueue.push(tree[t].l); 38 if(tree[t].r!=-1) 39 myqueue.push(tree[t].r); 40 } 41 } 42 } 43 int main() 44 { 45 46 int n; 47 48 num=0; 49 cin>>n; 50 51 for(int i=0;i<n;i++) 52 { 53 cin>>tree[i].l>>tree[i].r; 54 } 55 for(int i=0;i<n;i++) 56 cin>>val[i]; 57 58 sort(val,val+n); 59 midtrv(0,val); 60 leveltrv(0); 61 62 for(int i=0;i<n-1;i++) 63 cout<<val[i]<<" "; 64 cout<<val[n-1]<<endl; 65 return 0; 66 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:C++基础算法学习——猜假币
- 算法笔记刷题6 ( PAT 1003我要通过 ) 2020-05-08
- windows10环境下QtCreator中出现skipping incompatible xxx 2020-03-31
- [Uva1637][DFS][记忆化] 纸牌游戏 Double Patience 2020-03-06
- C++中的字符串输入输出,转自:https://www.cnblogs.com/zzw 2019-10-30
- A - A Compatible Pair-biaobiao88 2019-10-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash