二叉树的三序遍历
前序: node > left > right
中序: left > node > right
后序: left > right > node
前序:
//获得节点个数
int BSize(struct TreeNode* root)
{
if (root == NULL)
return 0;
return BSize(root->left)
+ BSize(root->right) + 1;
}
//把树中内容按照 前序遍历 拷入a中
void _preOrder(struct TreeNode* root, int* a, int* pi)
{
if (root)
{
//前序遍历,保存当前节点的值
a[*pi] = root->val;
++(*pi);
_preOrder(root->left, a, pi);
_preOrder(root->right, a, pi);
}
}
//中序遍历的函数
void _InOrder(struct TreeNode* root, int* a, int* pi)
{
if (root)
{
_InOrder(root->left, a, pi);
a[*pi] = root->val;
++(*pi);
_InOrder(root->right, a, pi);
}
}
//后序遍历的函数
void _postorderTraversal(struct TreeNode* root, int* a, int* pi)
{
if (root)
{
_postorderTraversal(root->left, a, pi);
_postorderTraversal(root->right, a, pi);
a[*pi] = root->val;
++(*pi);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int* a, i;
*returnSize = BSize(root);
a = (int*)malloc(sizeof(int) * (*returnSize));
i = 0;
_preOrder(root, a, &i);
return a;
}