首页 > 技术文章 > [leetcode]Binary Tree Preorder Traversal

bittorrent 2015-08-16 14:51 原文

Question :

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].

Explain :

          寫一個int* preorderTraversal(struct TreeNode* root, int* returnSize) 。

      要把traversal的結果,輸出一個array. 回傳array的head pointer. 但是array size怎辦呢?

      因為C一次只能回傳一個value. 這裡我們只好用call by address的方式,讓leetcode知道array size.

Code :  

  Recursive solution

int totalNodes(struct TreeNode* root) {
    if (!root) return 0;
    return 1+totalNodes(root->left)+totalNodes(root->right);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    *returnSize = totalNodes(root);
    int* rv = (int*)malloc(*returnSize*sizeof(int));
    void _preorderTraversal(struct TreeNode* root, int** rv){
        if(root) {
            **rv = root->val;
            (*rv)++;
            _preorderTraversal(root->left, rv);
            _preorderTraversal(root->right, rv);
        }
    }
    int* tmp = rv;
    _preorderTraversal(root, &rv);
    return tmp;
}

心得 : 一開始沒想到竟然要用到pointer of pointer. 來傳pointer address

     若是不用的話,我之前的程式。

   會在以下這個case出錯。

     3

    /     \

   1     2

  

 

推荐阅读