PAT1102 树的翻转
来源:互联网 发布:php继承的原理 编辑:程序博客网 时间:2024/06/05 14:42
题意:
将一颗树翻转。并求水平序列和中序序列。
翻转用递归求就行了。还有就是求根节点,根节点不是任何节点的孩子,通过这个可知哪个是根节点。
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<stack>#include<vector>#include<queue>#include<string>#include<map>using namespace std;#define INF 99999999#define M 20int lc[M],rc[M],rflag[M];int root;int invert(int node){int lchild=lc[node];int rchild=rc[node];if(node==-1)return -1;invert(lc[node]);invert(rc[node]);lc[node]=rchild;rc[node]=lchild;return node;}void levelprint(){int node;vector<int> ans;queue<int> q;q.push(root);while(!q.empty()){node = q.front();q.pop();if(node==-1)continue;ans.push_back(node);q.push(lc[node]);q.push(rc[node]);}for(int i=0;i<ans.size();i++){cout<<ans[i];if(i<ans.size()-1)cout<<" ";else cout<<endl;}}int printn=0;void inprint(int node,int n){if(node==-1)return;inprint(lc[node],n);printf("%d",node);printn++;if(printn==n)cout<<endl;else cout<<" ";inprint(rc[node],n);}int main(){int n,i;char lchild,rchild;scanf("%d",&n);for(i=0;i<n;i++)rflag[i]=1;for(i=0;i<n;i++){getchar();scanf("%c %c",&lchild,&rchild);if(lchild!='-'){rflag[lchild-'0']=0;lc[i]=lchild-'0';}else lc[i]=-1;if(rchild!='-'){rflag[rchild-'0']=0;rc[i]=rchild-'0';}else rc[i]=-1;}for(i=0;i<n;i++)if(rflag[i]==1){root=i;break;}invert(root);levelprint();inprint(root,n);}
阅读全文
0 0
- PAT1102 树的翻转
- pat1102 无语的错误,感谢有你
- 二叉树的翻转 Python
- 二叉树的翻转操作
- PAT1102. Invert a Binary Tree
- 3303 翻转区间 伸展树的解法
- 二叉树的镜像翻转
- 算法学习-二叉树的翻转
- 翻转课堂倒底翻转的是什么?
- 无情链表的创建,,翻转翻转
- 图片的拉伸翻转
- 单链表的翻转
- 数字的翻转
- 翻转的立方体
- 字符串翻转的问题
- 图片的翻转_opencv
- 栈的原地翻转
- 翻转队列的实现
- 创建标签
- ULUA 笔记
- 操作标签
- POJ 3258 River Hopscotch
- 使用GitHub
- PAT1102 树的翻转
- 数学形态学——腐蚀、膨胀、开、闭、细化
- 自定义Git
- JVM参数设置详解
- TCMalloc : Thread-Caching Malloc高性能的内存分配器(C/C++)
- 忽略特殊文件
- 值得推荐的C/C++框架和库
- linux离线安装grunt+ruby+compass
- 配置别名