【1020】Tree Traversals (25 分)

简介: 【1020】Tree Traversals (25 分)【1020】Tree Traversals (25 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
const int maxn=50;
struct node{
  int data;
  node* lchild;
  node* rchild;
};
int pre[maxn],in[maxn],post[maxn];//先序、中序及后序
int n;//结点个数
//当前二叉树的后序序列区间为[postL,postR],中序序列区间为[inL,inR]
//create函数返回构建出的二叉树的根结点地址
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;//这个k不要在for里面定义了,注意有效域
  for(k=inL;k<inR;k++){
    if(in[k]==post[postR]){  //在中序序列中找到in[k]==pre[L]的结点
      break;
    }
  }
  int numLeft=k-inL; //左子树的结点个数
  //返回左子树的根结点地址,赋值给root的左指针
  root->lchild=create(postL,postL+numLeft-1,inL,k-1);
  //返回右子树的根结点地址,赋值给root的右指针
  root->rchild=create(postL+numLeft,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(int i=0;i<n;i++){
    scanf("%d",&post[i]);
  }
  for(int i=0;i<n;i++){
    scanf("%d",&in[i]);
  }
  node* root=create(0,n-1,0,n-1);  //建树
  BFS(root);
  system("pause");
    return 0;   
}
相关文章
|
机器学习/深度学习 存储 C++
【PAT甲级 - C++题解】1123 Is It a Complete AVL Tree
【PAT甲级 - C++题解】1123 Is It a Complete AVL Tree
100 0
|
存储 C++
【PAT甲级 - C++题解】1115 Counting Nodes in a Binary Search Tree
【PAT甲级 - C++题解】1115 Counting Nodes in a Binary Search Tree
76 0
|
机器学习/深度学习 存储 C++
【PAT甲级 - C++题解】1110 Complete Binary Tree
【PAT甲级 - C++题解】1110 Complete Binary Tree
81 0
|
人工智能 BI
UPC-Coloring Edges on Tree(树的DFS)
UPC-Coloring Edges on Tree(树的DFS)
93 0
|
人工智能
[Codeforces 1286B] Numbers on Tree | 技巧构造
Evlampiy was gifted a rooted tree. The vertices of the tree are numbered from 1 to n. Each of its vertices also has an integer ai written on it. For each vertex i, Evlampiy calculated ci — the number of vertices j in the subtree of vertex i, such that a j < a i
115 0
[Codeforces 1286B] Numbers on Tree | 技巧构造
【1086】Tree Traversals Again (25 分)
【1086】Tree Traversals Again (25 分) 【1086】Tree Traversals Again (25 分)
104 0
【1110】Complete Binary Tree (25分)【完全二叉树】
【1110】Complete Binary Tree (25分)【完全二叉树】 【1110】Complete Binary Tree (25分)【完全二叉树】
123 0
1020. Tree Traversals (25)
//给定后序和中序遍历 要求输出层序遍历 #include #include #include using namespace std; const int maxn = 31; int n; struct node ...
692 0
1086. Tree Traversals Again (25)
//push是前序遍历 pop是中序遍历 根据前序遍历和中序遍历 输出后序遍历 #include #include #include using namespace std; int n; vector pre, in...
825 0