1020 Tree Traversals (25 分)

本文介绍了一种使用后序遍历和中序遍历序列构建二叉树的方法,并实现了层序遍历算法。通过递归创建节点,将后序和中序序列转换为树结构,最后利用队列进行层序遍历输出。适用于数据结构与算法的学习与实践。

后序中序建树+层序遍历

//
// Created by dgm on 2019/9/30.
//
#include <iostream>
using namespace std;
#define maxn 50
typedef struct node{
    int data;
    node*left;
    node*right;
}*tree;
void createTree(tree &t,int post[],int in[],int spost,int epost,int sin,int ein){
    if(sin>ein)return;
    int rpos;
    for (rpos=sin;rpos<=ein;rpos++) {
        if(in[rpos]==post[epost])break;
    }
    t=new node();
    t->data=in[rpos];
    int length=rpos-sin;
    createTree(t->left,post,in,spost,spost+length-1,sin,sin+length-1);
    createTree(t->right,post,in,spost+length,epost-1,sin+length+1,ein);
}
void levelTraverse(tree t,int n){
    tree queue[maxn];
    int front=0;
    int rear=0;
    int count=0;
    queue[rear++]=t;
    while(rear!=front){
        tree temp=queue[front++];
        if(count!=n-1)
            cout<<temp->data<<" ";
        else
            cout<<temp->data;
        count++;
        if(temp->left!=NULL)
            queue[rear++]=temp->left;
        if(temp->right!=NULL)
            queue[rear++]=temp->right;
    }
}
int main(){
    int n;
    cin>>n;
    int post[n],in[n];
    for (int i = 0; i < n; ++i) cin>>post[i];
    for (int i = 0; i < n; ++i) cin>>in[i];
    tree t=NULL;
    createTree(t,post,in,0,n-1,0,n-1);
    levelTraverse(t,n);
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值