先序和中序序列还原二叉树,递归实现

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
char data;
struct node *lchild,*rchild;
}treeno,*treenode;

void f(treenode &root,char *pre,char *in,int a,int b,int c,int d){

    if(a<=b&&c<=d)
    {
        int i;
root=new treeno;
root->data=pre[a];
root->lchild=NULL;
root->rchild=NULL;
for(int j=c;j<=d;j++){
    if(pre[a]==in[j]) i=j;
}
f(root->lchild,pre,in,a+1,a+i-c,c,i-1);
f(root->rchild,pre,in,a+i-c+1,b,i+1,d);
    }


}

int visit(treenode root){
if(root==NULL) return 0;
visit(root->lchild);
visit(root->rchild);
cout<<root->data;
return 0;
}

int main()
{
    treenode root;
    char *pre,*in;
    int m,n;
    pre=new char[100];
    in=new char[100];
    cin>>pre>>in;//1234567 3256471
    m=strlen(pre);
    n=strlen(in);


   f(root,pre,in,0,m-1,0,n-1);

    visit(root);
    //先1234567 中3256471 后3657421
   // cout << "Hello world!" << endl;
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值