題目
給定一個二叉樹,返回它的中序 遍歷。
示例:
輸入: [1,null,2,3]
1
\
2
/
3
輸出: [1,3,2]
進階: 遞歸算法很簡單,你可以通過迭代算法完成嗎?
方案:遞歸,迭代實現見Java版
void getTreeSize(struct TreeNode* root ,int* returnSize){
if(root->left!=NULL) {
(*returnSize)++;
getTreeSize(root->left,returnSize);
}
if(root->right!=NULL) {
(*returnSize)++;
getTreeSize(root->right,returnSize);
}
return returnSize;
}
int getVal(struct TreeNode* root,int* res,int index){
if(root->left!=NULL) index = getVal(root->left,res,index);
res[index++] = root->val;
if(root->right!=NULL) index = getVal(root->right,res,index);
return index;
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
if(root ==NULL) {
(*returnSize)=0;
return res;
}
(*returnSize) = 1;
getTreeSize(root,returnSize);
int* res = (int*) malloc(sizeof(int)*(*returnSize));
getVal(root,res,0);
return res;
}
複雜度計算
- 時間複雜度:O(n),n爲節點個數
- 空間複雜度:O(n)