PAT A1020 Tree Traversals 根据先序和中序求层序
来源:互联网 发布:app软件著作权说明书 编辑:程序博客网 时间:2024/05/21 22:22
//不会增加监视 //空格打不出来,全局变量不能放到局部函数中进行比较、赋值等操作!因为传递的是值,而不是位置。可是书上直接那样写的啊,郁闷 //不是queue<node>* q;是指针队列,队列中存放的就是指针,所以是queue<node*> q;第一个是定义一个指向存放node类型的队列的指针 //注意判断是大于等于,重建时递归条件 #include<cstdio>#include<queue>#include<algorithm>//#define LOCAL using namespace std;const int maxn=32;int postOrder[maxn];int inOrder[maxn];int n; struct node{int data;node* lchild,*rchild;};//queue<node> layerOrder;好像并不需要在这里定义 //如果不知道怎么写重建二叉树的函数,记得把先序或者后序遍历的左右边界在注释中列出来//后序序列区间[postL,postR],中序遍历区间[inL,inR] node* create(int postL,int postR,int inL,int inR){//在创建二叉树的时候才创建各个结点,不然只是在数组中的互相没有父子关系的离散点 //总是不知道递归边界if(postL>postR){//postL==postR的时候,序列中还有一个元素 .嗯我用一个元素试了一下。。 return NULL;//后序序列长度小于等于0时,直接返回 }node* root=new node();root->data=postOrder[postR];//找到在中序遍历中的 int i;for(i=inL;i<=inR;i++){//这里一开始写成了<而不是<=inR if(inOrder[i]==postOrder[postR]) break;}//需要计算一下数量把!下面这个数量确定需要算一下就好了!int leftnum=i-inL;//是的吧,除了i的个数int rightnum=inR-i;//也是正好啊,那就不对了吧,哦好像是对的,inl~inR个数是inR-inL+1 root->lchild=create(postL,postL+leftnum-1,inL,i-1);root->rchild=create(postL+leftnum,postR-1,i+1,inR);//这两行是自己推断着写的,居然对了!好开心,以为大部分可能会出个把错呢,所以ixangx自己! return root; } /*queue layerOrder(){} *///层序遍历就是BFS.一定记得每次新的root进行push入队列后取出的是队首元素 void BFS(node *root,int n){//需要确定起点的。这个root只做每次BFS的起点作用 queue<node*> q;//定义一个指针的队列。一定一定注意队列里存放的是地址q.push(root);//注意了,先把root放进队列,但是访问的却不是root,而是当前队列的队首元素,所以一定要取队首元素的!并且访问完要弹出队首元素,不是弹出root int num=0;//已经输出的结点个数 while(!q.empty()){node* now=q.front();//注意先保存队首元素(是指针哦!),然后访问,然后把对首元素相关的push不是把root相关的push! q.pop(); printf("%d",now->data);num++;if(num<n) printf(" "); if(now->lchild!=NULL) q.push(now->lchild); //居然一开始写成了BFS(now->lchild!BFS(now->rchild) if(now->rchild!=NULL) q.push(now->rchild); }} int main(){#ifdef LOCALfreopen("A1020.in","r",stdin);freopen("A1020.out","w",stdout);#endifint n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&postOrder[i]);}for(int i=0;i<n;i++){scanf("%d",&inOrder[i]);}node* root=create(0,n-1,0,n-1);//printf("%d\n",n); BFS(root,n);//哎,这个地方这样传参行不行呢return 0; }
0 0
- PAT A1020 Tree Traversals 根据先序和中序求层序
- PAT A1020. Tree Traversals
- PAT [A1020]-Tree Traversals
- 【PAT】A1020. Tree Traversals (25)
- PAT A1020. Tree Traversals (25)
- PAT甲级练习题A1020. Tree Traversals (25)
- PAT A1020 tree traversals (25)
- A1020. Tree Traversals (25)
- PAT (Advanced Level) 1086. Tree Traversals Again (25) 根据先根遍历数组创建树
- PAT 1020. Tree Traversals (25) 根据树的中序与后序,求层序
- pat 1020 Tree Traversals
- PAT 1020 Tree Traversals
- 【PAT】1020. Tree Traversals
- PAT 1020. Tree Traversals
- PAT 1020. Tree Traversals
- PAT 1020 Tree Traversals
- PAT--1020. Tree Traversals
- PAT 1020. Tree Traversals
- Jquery发送ajax请求以及datatype参数为text/JSON方式
- hdoj_1010 Temper of The Bone
- ant初识(一)
- CPP3基础
- eclipse运行时出现 android library project cannot be launch
- PAT A1020 Tree Traversals 根据先序和中序求层序
- 错误:“The content of element type "package" must match "(result-types?,interceptors?,default-intercept
- PADS:怎样全局替换元件封装
- 每日一题9:字典树(一)
- Sundy视频学习------TCPIP编程基础
- [Python]网络爬虫(八):糗事百科的网络爬虫(v0.3)源码及解析(简化更新)
- 矩阵的乘法
- 《Makefile的编写--下册》
- 备用