#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
TreeNode* CorereConstructBinaryTree(int* pre, int startPre, int endPre, int* in, int startIn, int endIn) {
if (startPre > endPre || startIn > endIn)
return NULL;
TreeNode* root = new TreeNode(pre[startPre]);//
for (int i = startIn; i <= endIn; i++)
if (in[i] == pre[startPre]){
root->left = CorereConstructBinaryTree(pre, startPre + 1, startPre + i - startIn, in, startIn, i - 1);
root->right = CorereConstructBinaryTree(pre, i - startIn + startPre + 1, endPre, in, i + 1, endIn);
break;
}
return root;
}
TreeNode* reConstructBinaryTree(int* pre, int* in, int length)
{
TreeNode* root = CorereConstructBinaryTree(pre, 0, length - 1, in, 0, length - 1);
return root;
}
void preprint(TreeNode* tree)
{
if (tree == NULL)
return;
cout << tree->val<<" ";
preprint(tree->left);
preprint(tree->right);
}
void inprint(TreeNode* tree)
{
if (tree == NULL)
return;
inprint(tree->left);
cout << tree->val << " ";
inprint(tree->right);
}
void postprint(TreeNode* tree)
{
if (tree == NULL)
return;
postprint(tree->left);
postprint(tree->right);
cout << tree->val << " ";
}
int main()
{
int pre[] = { 1, 2, 4, 7, 3, 5, 6, 8 };
int in[] = { 4, 7, 2, 1, 5, 3, 8, 6 };//8
TreeNode* tree=reConstructBinaryTree(pre, in, 8);
cout << "先序遍历: "; preprint(tree);
cout << endl<<"中序遍历: ";inprint(tree);
cout << endl << "后序遍历: ";postprint(tree);
cout << endl;
}