根据前序序列和中序序列构建二叉树

根据前序序列和中序序列构建二叉树

#include<bits/stdc++.h>
using namespace std;
int n;
typedef struct node{
    int val;
    struct node* left;
    struct node* right;
}*Bitree;

/*
如果q1数组为1 2 3 4 5
int* q2=q1+2;
则q2数组为3 4 5

*/
Bitree createBitree(int* q,int* z,int size){//size为中序长度,当size<1时说明该结点为空//
    if(size<1)return NULL;
    Bitree p=(Bitree)malloc(sizeof(struct node));
    p->val=q[0];//每次前序的第一个为结点//
    int f=0;//f来计算左子树的结点数//
    while(z[f]!=p->val)f++;//计算左子树结点数//
    int r=size-f-1;//当前中序长度减去左子树长度再减去根节点为右结点数//
    p->left=createBitree(q+1,z,f);//创建左子树,
    p->right=createBitree(q+f+1,z+f+1,r);//创建右子树
    return p;
}

void hdisplay(Bitree t){
    if(t==NULL)return ;
    else{
        hdisplay(t->left);
        hdisplay(t->right);
        cout<<t->val<<' ';
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    int q[100];
    int z[100];
    for(int i=0;i<n;i++){
        cin>>q[i];
    }
    for(int i=0;i<n;i++){
        cin>>z[i];
    }
    int size=n;
    Bitree t=createBitree(q,z,size);
    hdisplay(t);
    return 0;
}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值