「Leetcode」144.二叉树的前序遍历

语言: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%的用户

猜你喜欢

转载自blog.csdn.net/NanlinW/article/details/97000417