include <stdio.h>
include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode *CreateNode(int data)
{
struct TreeNode *node = (struct TreeNode *)malloc(sizeof(struct TreeNode ));
node->val = data;
node->left = node->right = NULL;
return node;
}
struct TreeNode * CreateTree(int preOrder[],int size, int *pused)
{
struct TreeNode *root;
int rootVal ;
int leftused = 0;
int rightused = 0;
if (size == 0)
{
*pused = 0;
return NULL;
}
rootVal = preOrder[0];
if (rootVal == -1)//该节点为空结点
{
*pused = 1;
return NULL;
}
root = CreateNode(rootVal);
root->left = CreateTree(preOrder + 1, size - 1, &leftused);
root->right = CreateTree(preOrder + 1 + leftused, size - 1 - leftused, &rightused);
*pused = 1 + leftused + rightused;
return root;
}
void pre(struct TreeNode *root)
{
if(root != NULL)
{
printf("%d", root->val);
pre(root->left);
pre(root->right);
}
}
void mid(struct TreeNode *root)
{
if(root != NULL)
{
mid(root->left);
printf("%d", root->val);
mid(root->right);
}
}
int main()
{
int preOrder[] = { 1, 2, -1, -1, 3, -1, 4, 5, -1, -1, -1 };
int size ;
int pused;
struct TreeNode *root;
size = sizeof(preOrder)/sizeof(int);
pused = 0;
root = NULL;
root = CreateTree(preOrder, size, &pused);
mid(root);
return 0;
}