1020. Tree Traversals (25)
来源:互联网 发布:mes用什么软件 编辑:程序博客网 时间:2024/06/17 05:16
题目信息:https://www.patest.cn/contests/pat-a-practise/1020
提交情况:
代码:
#include <iostream>#include <malloc.h>#include <vector>using namespace std;#define N 33typedef struct BTree{ int data; struct BTree* leftTree; struct BTree* rightTree;}BTree;//n为节点个数,post[]代表后序遍历序列,in[]代表中序遍历序列//front和rear为树队列的下标 int n,post[N],in[N],front,rear;BTree* queue[N];//用于存储二叉树的层次遍历的节点信息。因为题目要求最后不能有空,不好控制(或者说我不会,欢迎大神指点) vector<int> num; //根据后序和中序序列构造二叉树 BTree* creat( int post[],int in[],int length ){ if( length == 0 ) return NULL; else { BTree *root = (BTree*)malloc(sizeof(BTree)); root->data = post[length]; int i = 1; while( post[length] != in[i] && i<=length ) ++i; //通过控制post和in的起始地址和长度来控制左右子树的范围 //post[0]代表偏移量为0,即post不做偏移,等价于*(post+0) //post[1]代表偏移量为1,即post偏移sizeof(int)个字节数,等价于*(post+1) //其实下面的两句代码才是关键, 控制post和in的起始地址 root->leftTree = creat(post,in,i-1); root->rightTree = creat(post+i-1,in+i,length-i); return root; }}//树层次遍历和图的广度遍历相似,而树是一种特殊的图,只有n-1条边,其中n为节点个数 void BFS( BTree *root ) { queue[++rear] = root; while( front != rear ) { BTree* bt = queue[++front]; num.push_back(bt->data); if( bt->leftTree != NULL ) { queue[++rear] = bt->leftTree; } if( bt->rightTree != NULL ) { queue[++rear] = bt->rightTree; } }}//前序遍历 void preOrder( BTree *bt ){ if( bt != NULL ) { cout<<bt->data<<" "; preOrder(bt->leftTree); preOrder(bt->rightTree); }}int main(){ cin>>n; for( int i=1;i<=n;++i ) //数组下标从1开始 cin>>post[i]; //输入后序遍历的序列 for( int i=1;i<=n;++i ) //数组下标从1开始 cin>>in[i]; //输入中序遍历的序列 BTree *root = creat(post,in,n);// preOrder(root);// cout<<"前序遍历结束"<<endl; //层次遍历前的初始化,初始化队列queue的下标 front = rear = -1; BFS(root); for( int i=0;i<num.size();++i ) { if( i == num.size()-1 ) cout<<num[i]<<endl; else cout<<num[i]<<" "; } return 0;}
0 0
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- 1020. Tree Traversals (25)
- Delphi中String与PAnsiChar转换
- SDN控制器Floodlight源码学习(四)--控制器和交换机交互(2)
- Ubuntu 16 打开SSH服务
- 装饰者模式
- Neural Machine Translation and Sequence-to-sequence Models: A Tutorial
- 1020. Tree Traversals (25)
- delphi中的ParamStr
- kylin入门到实战:cube详述
- uva1632 dp
- 手机版本高于Xcode版本的时候,怎么不更新Xcode继续在手机上运行
- Flume+Spark+Hive+Spark SQL离线分析系统
- 部署linux服务器
- 【Java学习笔记】06.类和对象
- 字母、数字和点数的识别-类osmo软件开发