TreeNode* createTree(const int arr[], const int n, const int num_val = -1)
{
if (n <= 0 || arr[0] == num_val) return nullptr;
std::queue<TreeNode*> q;
TreeNode* root = new TreeNode(arr[0]);
q.push(root);
int i = 1;
while (!q.empty() && i < n)
{
TreeNode* cur = q.front();
q.pop();
if (i < n && arr[i] != num_val)
{
cur->left = new TreeNode(arr[i]);
q.push(cur->left);
}
i++;
if (i < n && arr[i] != num_val)
{
cur->right = new TreeNode(arr[i]);
q.push(cur->right);
}
i++;
}
return root;
}
void preOrder(const TreeNode* tree)
{
if (nullptr == tree) return;
printf("%d ", tree->val);
preOrder(tree->left);
preOrder(tree->right);
}
void inOrder(const TreeNode* tree)
{
if (nullptr == tree) return;
inOrder(tree->left);
printf("%d ", tree->val);
inOrder(tree->right);
}
void postOrder(const TreeNode* tree)
{
if (nullptr == tree) return;
postOrder(tree->left);
postOrder(tree->right);
printf("%d ", tree->val);
}
void deleteTree(TreeNode*& tree)
{
if (nullptr == tree) return;
deleteTree(tree->left);
deleteTree(tree->right);
tree->left = nullptr;
tree->right = nullptr;
delete tree;
tree = nullptr;
}
int main()
{
int nums[] = { 10, 20, 30, 25, -1, 40, 50, -1, -1, -1, 60 };
TreeNode* root = createTree(nums, sizeof(nums) / sizeof(int));
preOrder(root);
printf("\n");
inOrder(root);
printf("\n");
postOrder(root);
deleteTree(root);
return 0;
}