已知先、中序序列,构造二叉树问题

xunuo20041101 xunuo20041101 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
看到一道面试题,觉得好玩,写了个算法
一起交流一下,希望能抛砖引玉,并望高手指正
#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;
}
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部