**题目:给出了某二叉树的前序遍历和中序遍历结果,请重建二叉树。
范例:
前序遍历:1, 2, 4, 7, 3, 5, 6, 8
中序遍历:4, 7, 2, 1, 5, 3, 8, 6
二叉树结构为:
**
解题代码:
#include <iostream>
struct BTNode
{
int data;
BTNode *lchild;
BTNode *rchild;
};
BTNode* ConstructBT(int *preorder, int *inorder, int len)
{
BTNode *bt = (BTNode*)malloc(sizeof(BTNode));
int index = 0;
while (inorder[index] != preorder[0] && index < len)
{
index++;
}
if (index == len)
{
return NULL;
}
bt->data = preorder[0];
bt->lchild = ConstructBT(preorder + 1, inorder, index);
bt->rchild = ConstructBT(preorder + index + 1, inorder + index + 1, len - index - 1);
return bt;
}
int main()
{
int preorder[] = { 1, 2, 4, 7, 3, 5, 6, 8 };
int inorder[] = { 4, 7, 2, 1, 5, 3, 8, 6 };
BTNode* bt;
bt = ConstructBT(preorder, inorder, 8);
system("pause");
return 0;
}