问题描述
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
问题分析
因为要以数组的形式返回前序遍历序列所以与普通的前序遍历多了一步将返回的数组合并的过程,将当前二叉树的左子树,根,右子树按照顺序合并成为一个数组,之后再依次返回上层进行合并即可,这是一个递归的过程。
代码
int* preorderTraversal(struct TreeNode* root, int* returnSize) {if(root!=NULL){int *left = preorderTraversal(root->left, returnSize);int leftLength = *returnSize; int *right = preorderTraversal(root->right, returnSize);int rightLength = *returnSize;int num = leftLength + rightLength;int *answer = (int *)malloc(sizeof(int)*(num+1));int k = 0;answer[k++] = root->val;for(int i=0; i<leftLength; i++){answer[k++] = left[i];}for(int i=0; i<rightLength; i++){answer[k++] = right[i];}free(left);free(right);left = NULL;right = NULL;*returnSize = num+1;return answer;}*returnSize = 0;return NULL;
}