已知先、中序序列,构造二叉树问题
看到一道面试题,觉得好玩,写了个算法
一起交流一下,希望能抛砖引玉,并望高手指正
#include <stdio.h>
#include <string.h>
struct Node
{
Node* left;
Node* right;
char value;
};
void Rebuild(char* preOrder/*先序*/, char* inOrder/*中序*/,
int length/*子树长度*/, Node** root/*root为输出*/)
{
if (length == 0)
{
*root = NULL;
return;
}
(*root) = new Node;
(*root)->value = preOrder[0];
char tmp = preOrder[0];
for (int i=0; i<length; i++)
{
if (inOrder[i] == tmp)
break;
}
Rebuild(preOrder+1, inOrder, i, &((*root)->left));
Rebuild(preOrder+i+1, inOrder+i+1, length-i-1, &((*root)->right));
}
void PostOrder(Node* root)
{
if (root != NULL)
{
PostOrder(root->left);
PostOrder(root->right);
printf("%c", root->value);
}
}
int main()
{
char* preOrder = "abdecfg";
char* inOrder = "dbeafcg";
Node* root;
Rebuild(preOrder, inOrder, strlen(preOrder), &root);
PostOrder(root);
printf("\n");
return 0;
}