A 1020 Tree Traversals (25分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历

Posted leamant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A 1020 Tree Traversals (25分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历相关的知识,希望对你有一定的参考价值。

二叉树的遍历 题型

此类题做法

1.定义节点

2.构造二叉树{

        a.边界条件

        b.建立新节点root

          存入根节点数据(由后序或先序

        c.  k  遍历中序,找到相等的值 

        d.  得出左子树个数(中序的 ) 

        e.返回左子树根节点地址,返回右子树根节点地址,return root;

3.层次遍历{

        a.创建队列,queue

        b.把root进队  q.push(root)(这是所有的root。。???)

        c.输出层次遍历数据{

                  判空-》取出首元素-》清空队列(防止超时)-》printf元素,-》判断左子树空或插入,右子树空或插入

 

 

 

#include<cstdio>
#include<queue>
//#include<cstring>
//#include<algorithm>
using namespace std;


const int maxn=50;
struct node{
    int data;
    node* lchild;
    node* rchild;
    
};

int pre[maxn],post[maxn],in[maxn];
int n;

node* create(int postL,int postR,int inL,int inR)
{
    if(postL>postR){
        return NULL;
    }
    node* root =new node;//申请一个node型变量空间
    root->data=post[postR];
    
    int k;
    for(k=inL;k<=inR;k++)//遍历,从左到右边的值
    {
        if(in[k]==post[postR])
         break;
     } 
     
     int numLeft=k-inL;
     root->lchild=create(postL,postL+numLeft-1,inL,k-1);
     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);
        return 0;
    }
    
    

 

以上是关于A 1020 Tree Traversals (25分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历的主要内容,如果未能解决你的问题,请参考以下文章

1020. Tree Traversals (25)

A 1020 Tree Traversals (25分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历

1020 Tree Traversals (25分)

PAT 1020. Tree Traversals

PAT 1020 Tree Traversals

PAT A1020 Tree Traversals [二叉树遍历]