语言:C语言
思路:前序遍历的顺序为根->左子树->右子树(NLR),首先需要计算需要开辟多大的空间,但是空间大小不能随便开辟,建立一个TreeSize()函数计算树的节点数量,有多少节点开辟多大的空间,然后建立一个函数_preorderTraversal(),使用前序遍历的顺序将每个节点依次放入数组,最后输出该数组即为题目答案。
思路脑图如下图所示
_preorderTraversal()函数详解
以下图中树为例,index初始值为0即指向数组的第一个元素,按照前序遍历的顺序先将A放入数组,然后index向后移动再将B放入数组,依次类推,最终将整颗树放入数组。
代码如下
int TreeSize(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
return TreeSize(root->left)+TreeSize(root->right)+1;
}
void _preorderTraversal(struct TreeNode* root, int* array, int* pIndex)
{
if(root == NULL)
return;
array[*pIndex] = root->val;
++(*pIndex);
_preorderTraversal(root->left, array, pIndex);
_preorderTraversal(root->right, array, pIndex);
}
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
*returnSize = TreeSize(root);
int* array = (int*)malloc(*returnSize * sizeof(int));
int index = 0;
_preorderTraversal(root, array, &index);
return array;
}
提交结果击败99.14%的用户