创建二叉树

时间: 1ms        内存:128M

描述:

已知一颗二叉树的中序序列为cbedahgijf,后序序列为cedbhjigfa,给出二叉树的树形表示(用括号法)。

输入:

输出:

输出带有括号与字母的用括号法表示的二叉树。

示例输入:

示例输出:

提示:

参考答案(内存最优[0]):

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
typedef char ElemType;
#define SizeMax 205
int max1=0;
typedef struct Node
{
    ElemType data;
    Node* lchild;
    Node* rchild;
} TBNode;
TBNode*bt2(char*post,char *in,int n)
{
    TBNode *b;
    char r,*p;
    int k;
    if(n<=0)return NULL;
    r=*(post+n-1);
    b=(TBNode *)malloc(sizeof(TBNode));
    b->data=r;
    for(p=in;p<in+n;p++)
    if(*p==r)break;
    k=p-in;
    b->lchild=bt2(post,in,k);
    b->rchild=bt2(post+k,p+1,n-k-1);
    return b;
}
void DispTBNode(TBNode*b)
{
    if(b!=NULL)
    {
        printf("%c",b->data);
        if(b->lchild!=NULL||b->rchild!=NULL)
        {
            printf("(");
            DispTBNode(b->lchild);
            if(b->lchild!=NULL)printf(",");
            DispTBNode(b->lchild);
            printf(")");
        }
    }
}
int main()
{
    char a[]={'c','b','e','d','a','h','g','i','j','f'};
   char b[]={'c','e','d','b','h','j','i','g','f','a'};
TBNode *Tree;
Tree=bt2(b,a,10);
DispTBNode(Tree);
    return 0;
}

参考答案(时间最优[0]):

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
typedef char ElemType;
#define SizeMax 205
int max1=0;
typedef struct Node
{
    ElemType data;
    Node* lchild;
    Node* rchild;
} TBNode;
TBNode*bt2(char*post,char *in,int n)
{
    TBNode *b;
    char r,*p;
    int k;
    if(n<=0)return NULL;
    r=*(post+n-1);
    b=(TBNode *)malloc(sizeof(TBNode));
    b->data=r;
    for(p=in;p<in+n;p++)
    if(*p==r)break;
    k=p-in;
    b->lchild=bt2(post,in,k);
    b->rchild=bt2(post+k,p+1,n-k-1);
    return b;
}
void DispTBNode(TBNode*b)
{
    if(b!=NULL)
    {
        printf("%c",b->data);
        if(b->lchild!=NULL||b->rchild!=NULL)
        {
            printf("(");
            DispTBNode(b->lchild);
            if(b->lchild!=NULL)printf(",");
            DispTBNode(b->lchild);
            printf(")");
        }
    }
}
int main()
{
    char a[]={'c','b','e','d','a','h','g','i','j','f'};
   char b[]={'c','e','d','b','h','j','i','g','f','a'};
TBNode *Tree;
Tree=bt2(b,a,10);
DispTBNode(Tree);
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。