#include <iostream>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
void Mirror(TreeNode *pRoot) {
TreeNode *tmpNode;
if (pRoot == NULL)
{
return;
}
if (pRoot->left || pRoot->right)
{
tmpNode = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = tmpNode;
if (pRoot->left)
{
Mirror(pRoot->left);
}
if (pRoot->right)
{
Mirror(pRoot->right);
}
}
}
TreeNode* ConstructT(int *preorder, int *inorder, int len)
{
TreeNode* pRoot = (TreeNode*)malloc(sizeof(TreeNode));
int index = 0;
while (inorder[index] != preorder[0] && index < len)
{
index++;
}
if (index == len)
{
return NULL;
}
pRoot->val = preorder[0];
pRoot->left = ConstructT(preorder + 1, inorder, index);
pRoot->right = ConstructT(preorder + index + 1, inorder + index + 1, len - index - 1);
return pRoot;
}
void PrintPreorder(TreeNode *pRoot)
{
if (pRoot)
{
std::cout << pRoot->val << " ";
PrintPreorder(pRoot->left);
PrintPreorder(pRoot->right);
}
}
void PrintInorder(TreeNode *pRoot)
{
if (pRoot)
{
PrintInorder(pRoot->left);
std::cout << pRoot->val << " ";
PrintInorder(pRoot->right);
}
}
};
int main()
{
Solution s;
TreeNode * pRoot;
int preorder[] = {8, 6, 5, 7, 10, 9, 11};
int inorder[] = { 5, 6, 7, 8, 9, 10, 11 };
int len = 7;
pRoot = s.ConstructT(preorder, inorder, len);
s.PrintPreorder(pRoot);
std::cout << std::endl;
s.PrintInorder(pRoot);
std::cout << std::endl;
s.Mirror(pRoot);
s.PrintPreorder(pRoot);
std::cout << std::endl;
s.PrintInorder(pRoot);
std::cout << std::endl;
system("pause");
return 0;
}