pat1102 无语的错误,感谢有你
来源:互联网 发布:淘宝服装拍摄报价 编辑:程序博客网 时间:2024/05/16 23:48
题目内容
https://www.patest.cn/contests/pat-a-practise/1102
关于树的题目实在是不好复制粘贴,我就直接放链接啦~~~
题目分析
1.题目意思就是把二叉树,倒置一下,输出层次遍历和中序遍历结果。二叉树倒置,肯定不是上下颠倒,而是左右颠倒。在颠倒时树的根节点是不会变的。因此,在建树时直接把左右节点变一下就好。
2.关于,“-”的处理,“-”代表没有,那么一般我喜欢用-1表示,在输入的时候变一下就好。
3.找根节点。。。。。。只有根节点没有父亲节点,也就是说根节点不是那个节点的孩子节点,因此在输入中没有出现的那个在0-N之间的那个数就是根节点!要不是写代码,我真的不能深入理解只有根节点没有父节点。
4.关于中序遍历,利用递归就可以轻而易举的实现。关于层次遍历,利用队列,根节点入队,然后节点出对,节点的左右子树分别入队,就是这么简单。
5.我的妈呀,全局变量和局部变量一定要分清楚呀。我就是BiTree一会局部一会全局,导致程序崩溃。好气呀!
不说了,看代码
#include <iostream>#include <stdlib.h>#include <queue>/* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std;struct BiNode{ int value,lchild,rchild;};const int NUM = 11;BiNode BiTree[NUM];int inOrderSequence[NUM]={-1};int index = 0;//中序遍历 void InOrder(int root){ if(BiTree[root].lchild!=-1){ InOrder(BiTree[root].lchild); } inOrderSequence[index++] = BiTree[root].value; if(BiTree[root].rchild!=-1){ InOrder(BiTree[root].rchild); }}int main(int argc, char *argv[]) { int n ; cin>>n; int num[n]; //建立二叉树 for(int i=0;i<n;i++){ char lc,rc; int lchild,rchild; cin>>lc>>rc; if(lc=='-'){ lchild = -1; } else{ lchild = lc-'0'; } if(rc=='-'){ rchild = -1; } else{ rchild = rc - '0'; } BiTree[i].rchild = lchild; BiTree[i].lchild = rchild; BiTree[i].value = i; } //找根节点 int NodeIndex[n]; int root; for(int i=0;i<n;i++){ NodeIndex[i] = 0; } for(int i=0;i<n;i++){ if(BiTree[i].lchild!=-1){ NodeIndex[BiTree[i].lchild]++ ; } if(BiTree[i].rchild!=-1){ NodeIndex[BiTree[i].rchild]++ ; } } for(int i=0;i<n;i++){ if(NodeIndex[i] == 0){ root = i; } } //层次遍历,借助队列 queue<int> q; q.push(root); int levelSequence[n]; int index = 0; while(!q.empty()){ int top = q.front(); levelSequence[index++]=BiTree[top].value; q.pop(); if(BiTree[top].lchild!=-1) q.push(BiTree[top].lchild); if(BiTree[top].rchild!=-1) q.push(BiTree[top].rchild); } cout<<levelSequence[0]; for(int i=1;i<n;i++){ if(levelSequence[i]!=-1){ cout<<" "<<levelSequence[i]; } } cout<<endl; InOrder(root); cout<<inOrderSequence[0]; for(int i=1;i<n;i++){ if(inOrderSequence[i]!=-1){ cout<<" "<<inOrderSequence[i]; } } return 0;}
阅读全文
0 0
- pat1102 无语的错误,感谢有你
- 感谢恩师,感谢有你!
- 感谢有你
- PAT1102 树的翻转
- 成长路上,感谢有你
- 感谢有你,一路相随 !
- 博客十年,感谢有你!
- 博客十年,感谢有你!
- 博客十年,感谢有你!
- 博客十年,感谢有你!
- 博客十年,感谢有你!
- 博客十年,感谢有你!
- 不说再见,感谢有你!
- 编程的世界,我来了,感谢有你
- 亲爱的听众,感谢你。因为相知,才有相伴~
- 2010.12.31 感谢一路有你
- 见证,邂逅,感谢一路有你
- 系统管理员感谢日:你有什么愿望?
- FM算法详解
- Linux 服务器性能出问题,排查下这些参数指标
- 限额10位 | 成为鹿晗背后的男人,4个月搞定高薪Linux运维工程师
- 使用DatatTable插件實現分頁功能
- (4.1.45.4)撸出一份支持自定义Grid的RecyleView
- pat1102 无语的错误,感谢有你
- wireshark
- lua string库 字符串 用法详解
- 82、java的IO操作-字节缓冲流
- springboot(十):邮件服务
- 设备树在platform设备驱动中的使用
- 高可用集群之简单资源配置
- 解决导入第三方框架v4包重复依赖的问题
- eclipse快捷键Ctrl+Shift+i获取调试过程中方法返回值失效