您好,欢迎来到刀刀网。
搜索
您的当前位置:首页由先序遍历和中序遍历序列建立二叉树

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

来源:刀刀网

题解:

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

这个代码在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;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务