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