0
点赞
收藏
分享

微信扫一扫

1020. Tree Traversals (25)


1020. Tree Traversals (25)


时间限制



400 ms



内存限制



65536 kB



代码长度限制



16000 B



判题程序



Standard



作者



CHEN, Yue


Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.


Sample Input:


7 2 3 1 5 7 6 4 1 2 3 4 5 6 7


Sample Output:


4 1 6 3 5 7 2


提交代码

#include<stdio.h>
 #include<string.h>

 #include<algorithm>

 #include<queue>

 using namespace std;

 int n,i,j;

  struct node{

  
 int data;

  
 node*lchild;

  
 node*rchild;

  };

 int post[50],in[50];

  node*create(int postL,int postR,int inL,int inR)

  {



      if(postL>postR)

      {

      
 return NULL;

}

      node*root = new node;//存放根节点的地址

root->data = post[postR];//根节点的值

//遍历找到左右子树的个数 

int k;

for(k=inL;k<=inR;k++)

{

if(in[k]==post[postR])

         break;
 

}

      int numberLeft = k-inL;//左子树的个数

      //赋值给左子树 
 

      root->lchild=create(postL,postL+numberLeft-1,inL,k-1);

      root->rchild=create(postL+numberLeft,postR-1,k+1,inR);

      return root;//返回根节点地址 

  }

  int num=0;

 void BFS(node*root)

 {

queue<node*>q;

     q.push(root);

     while(!q.empty())

     {

     
node*now=q.front();

     
q.pop();

         printf("%d",now->data);

     
num++;

     
if(num<n){

     
 printf(" ");
 

}

if(now->lchild!=NULL)q.push(now->lchild);

if(now->rchild!=NULL)q.push(now->rchild);

}

 } 

 int main()

 {

scanf("%d",&n);

for(i=0;i<n;i++)

{

scanf("%d",&post[i]);

}

for(j=0;j<n;j++)

{

scanf("%d",&in[j]);

}

//建树

node*root = create(0,n-1,0,n-1);

//层序遍历

BFS(root); 

     return 0; 

 }


举报

相关推荐

0 条评论