题目是经典前序遍历,不同的是要把节点数据存到数组中,并返回 。解题要点就是把数组作为参数代入,随着循环存储节点数据。
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int* ret =NULL;
*returnSize=0;
backtrack(root, returnSize, &ret);
return ret;
}
void backtrack(struct TreeNode* root, int* returnSize, int** ret) {
*ret = realloc(*ret, 4 * ((*returnSize) + 1));
if (root == NULL);
else {
(*ret)[*returnSize] = root->val;
(*returnSize)++;
backtrack(root->left, returnSize, ret);
backtrack(root->right, returnSize, ret);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int* ret = NULL;
*returnSize = 0;
ret = malloc(4 * 256);
backtrack(root, returnSize, ret);
return ret;
}
void backtrack(struct TreeNode* root, int* returnSize, int* ret) {
if (root == NULL);
else {
ret[*returnSize] = root->val;
(*returnSize)++;
backtrack(root->left, returnSize, ret);
backtrack(root->right, returnSize, ret);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
struct TreeNode **stack=malloc(sizeof(struct TreeNode*)*100);
int top=-1;
if(root)
stack[++top]=root;
int *ret=malloc(100*sizeof(int));
*returnSize=0;
while(top!=-1){
root=stack[top--];
ret[(*returnSize)++]=root->val;
if(root->right){
stack[++top]=root->right;
}
if(root->left){
stack[++top]=root->left;
}
}
return ret;
}