您的位置:首页 > 职场人生

面试题6:重建二叉树

2013-06-17 14:11 246 查看
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

思路:递归建立二叉树

源程序:

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: