面试题6:重建二叉树

来源:互联网 发布:discuz源码安装 编辑:程序博客网 时间:2024/05/16 10:12

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

思路:递归建立二叉树

源程序:

#include "stdio.h"#include "string.h"#include "stdlib.h"typedef struct BiTNode{ char ch;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;int GetPos(char* str, char ch){    for(int i=0; i<strlen(str); i++)    {        if(ch==str[i])        {            return i;        }    }    return -1;}void Rebuild(char* PreOrder, char* InOrder, int len, BiTree &L){    if(L==NULL)        return;    L=(BiTree)malloc(sizeof(BiTNode));    L->ch = PreOrder[0];    int i=GetPos(InOrder, PreOrder[0]);    if(i>=len-1)        L->rchild=NULL;    if(i==0)        L->lchild=NULL;    Rebuild(&PreOrder[1], InOrder, i, L->lchild);    Rebuild(&PreOrder[i+1], &InOrder[i+1],len-i-1, L->rchild); }void PostOrderRetrieval(BiTree root)    //后序遍历树{    if(root==NULL)        return;    if(root->lchild !=NULL)        PostOrderRetrieval(root->lchild);    if(root->rchild !=NULL)        PostOrderRetrieval(root->rchild);    printf("%c ", root->ch);}int main(){    BiTree root;    root = (BiTree)malloc(sizeof(BiTNode));    Rebuild("abdehcfgij", "dbheafcgji", 10, root);printf("后序遍历结果:\n");    PostOrderRetrieval(root);    free(root);}

结果:

后序遍历结果:d h e b f j i g c a


原创粉丝点击