3.1 144. Binary Tree Preorder Traversal (Medium)

Given a binary tree, return the preorder traversal 
of its nodes' values.

For example:
Given binary tree {1,#,2,3},
   1
    \
     2
    /
   3
return [1,2,3].```

Preorder Traversal 前序遍歷 順序是:根、左子樹、右子樹,就是DFS. 解法有遞迴、迴圈跟Morris Traversal Algorithm。  

為什麼要宣告一個那麼大array,因為它題目就是那麼煩,為什麼每題C都要用malloc , 在不知道題相的樹到底會多大情況下,先隨便告一個很大的空間試試online judge 會不會過。  

```c
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */



void preOrder(struct TreeNode* n,int array[], int *i)
{

    if(n!=NULL){

        array[(*i)]=n->val;
        (*i)++;

        preOrder(n->left,array,i);
        preOrder(n->right,array,i);
    }
}

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
     int *nodes;
     int array[1000];
     int i=0;

     if(root ==NULL)
        return 0;

     /*preorder 尋訪結點,把結果存到array裡*/   
     preOrder(root,array,&i);

     /*照題目要求宣告一個空間,把結果傳回去*/
     *returnSize=i;
     nodes=(int *)malloc(i*sizeof int);
     memcpy(nodes,array,i*sizeof int);

     return nodes;
}

results matching ""

    No results matching ""