/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
题中给了一个二叉树的结构体。
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
int size = 0;
size = TreeSize(root);
int* a = (int*)malloc(size * sizeof(int));
int i = 0;
_prevorder(root, a, &i);
*returnSize = size;
return a;
}
这个函数是主函数,它首先计算树的大小,然后分配一个足够大的数组来存储遍历结果。接着,它调用 _prevorder
函数来填充数组,并设置 returnSize
以指示数组的大小。
int TreeSize(struct TreeNode* root)
{
return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}
该函数递归地计算二叉树中节点的总数。如果节点为空(root == NULL
),则返回 0;否则,它返回左子树的大小、右子树的大小加上 1(当前节点本身)。
void _prevorder(struct TreeNode* root, int* a, int *p)
{
if (root == NULL)
{
return;
}
else
{
a[*p] = root->val;
(*p)++;
_prevorder(root->left, a, p);
_prevorder(root->right, a, p);
}
}
这个函数是一个辅助函数,用于执行前序遍历。它首先检查当前节点是否为空。如果不为空,它将节点的值存储在数组 a
的当前位置(由指针 p
指向),然后递增 p
,并递归地对左子树和右子树进行前序遍历。