由先序遍历和中序遍历序列建立二叉树

题目链接<http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1008>//zjnu

<http://poj.org/problem?id=2255>//poj

题解:

一、递归建树,递归输出就行。

这个代码在poj上能过,zjnu上会re



#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
BiTNode* CreatBiTree(char *pre,char *in,int n){
    if(n<=0) return NULL;
    BiTree bt;
    bt=(BiTree)malloc(sizeof(BiTree));
    bt->data=pre[0];
    char *p=strchr(in,pre[0]);
    int len=p-in;
    bt->lchild=CreatBiTree(pre+1,in,len);
    bt->rchild=CreatBiTree(pre+len+1,p+1,n-len-1);
    return bt;
}
void PostOrder(BiTree T){
    if(T==NULL) return;
    PostOrder(T->lchild);
    PostOrder(T->rchild);
    printf("%c",T->data);
    return;
}
char a[100005],b[10005];
int main(){
    while(scanf("%s%s",a,b)!=EOF){
        BiTree T=CreatBiTree(a,b,strlen(a));
        PostOrder(T);
        printf("\n");
    }
    return 0;
}

二、建树和输出并排进行。题目只要求输出,就可以直接按照后序遍历的方式遍历,甚至不需要建树。

这个代码两边都可以过



#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
char a[100005],b[100005];
void CreatBiTree(char *pre,char *in,int n){
    if(n<=0) return;
    int len=strchr(in,pre[0])-in;
    CreatBiTree(pre+1,in,len);
    CreatBiTree(pre+len+1,in+len+1,n-len-1);
    printf("%c",pre[0]);
}
int main(){
    while(scanf("%s%s",a,b)!=EOF){
        CreatBiTree(a,b,strlen(a));
        printf("\n");
    }
    return 0;
}

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值