/*递归*/
void func(struct Node* root, int* arr,int* returnSize)
{
    arr[(*returnSize)++] = root->val;
    for (int i=0; i<root->numChildren; i++)
    {
        func(root->children[i],arr,returnSize);
    }
}
int* preorder(struct Node* root, int* returnSize) {
    *returnSize=0;
    if (!root) return NULL;
    int* arr = (int*)calloc(10000,sizeof(int));
    func(root,arr,returnSize);
    return arr;
}

 

 

/**
 * 迭代
 **/ 
#define MAX_SIZE 10240
int* preorder(struct Node* root, int* returnSize) {
  int i, top = -1, *result = (int*)calloc(MAX_SIZE, sizeof(int));
  struct Node *p, **stack = (char**)malloc(sizeof(struct Node*) * MAX_SIZE);
  *returnSize = 0;
  if (root == NULL) return result;
  stack[++top] = root;
  while (top != -1) {
    p = stack[top--];
    result[(*returnSize)++] = p->val;
    // 从最后一个孩子开始入栈
    for (i = p->numChildren - 1; i >= 0; i--)
      stack[++top] = p->children[i];
  }
  return result;
}