1020. Tree Traversals (25)

来源:互联网 发布:windows 文件管理工具 编辑:程序博客网 时间:2024/05/21 15:49

题目:https://www.patest.cn/contests/pat-a-practise/1020

主要:for里和外使用同一个变量,导致长度计算错误,注意变量的命名

#include<cstdio>#include<algorithm>#include<queue>using namespace std;#define MAXN 35struct node{int data;node *lchild,*rchild;}*root;int n,flag = 0,pos[MAXN],in[MAXN];node* creat(int PosL,int PosR, int InL,int InR){//注意返回的情况!if(PosL > PosR)return NULL;node *now = new node;now->data = pos[PosR];int k=0,numL=0;for(k=InL; k<=InR; k++){if(in[k] == pos[PosR])break;}numL = k - InL;now->lchild = creat(PosL, PosL+numL-1,InL,k-1);now->rchild = creat(PosL+numL,PosR-1, k+1, InR);return now;}void level_order(node* root){queue<node*> qu;qu.push(root);while (!qu.empty()){node* front = qu.front();qu.pop();if(flag == 0){printf("%d",front->data);flag = 1;}else{printf(" %d",front->data);}if(front->lchild != NULL)qu.push(front->lchild);if(front->rchild != NULL)qu.push(front->rchild);}}int main(){scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d",&pos[i]);}for(int i=0; i<n; i++)scanf("%d",&in[i]);root = creat(0,n-1,0,n-1);level_order(root);return 0;}



0 0
原创粉丝点击