码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-07-21 14:18:40      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:rsa   class   root   scanf   space   using   二叉树   pac   ret   

二叉树的遍历 题型

此类题做法

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分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历

标签:rsa   class   root   scanf   space   using   二叉树   pac   ret   

原文地址:https://www.cnblogs.com/leamant/p/13354217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!