2023年7月20日 星期四

[889] Construct Binary Tree from Preorder and Postorder Traversal

在malloc的地方搞錯了之外 XD
竟然可以無痛PASS !!! 覺得感動!!!

雖然看起來好像可以少一次計算?!但算了就先這樣吧XD 
(好吧雖然覺得算了但我還是研究了一下XD 總長是固定的,且 preorder的size跟postorder的size是相同的,總之就是說left 跟right 可以只找一次index就好了,另一個用算的就好了QQ)

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* constructFromPrePost(int* preorder, int preorderSize, int* postorder, int postorderSize){
if (preorderSize < 1 || postorderSize<1)
return NULL;

struct TreeNode* head = malloc (sizeof(struct TreeNode));
head->left= NULL;
head->right= NULL;
head->val = preorder[0];

if (preorderSize==1)
return head;
int leftroot=preorder[1];
int rightroot=postorder[postorderSize-2];
int cut=-1;
for(int j=preorderSize-1;j>0;j--)
if (preorder[j]==rightroot)
{
cut=j;
break;
}
#if 0
int postcut=-1;
for (int j=0;j<postorderSize-2;j++)
if (postorder[j]==leftroot)
{
postcut=j;
break;
}
head->left= constructFromPrePost(&preorder[1],cut-1,postorder,postcut+1);
head->right= constructFromPrePost(&preorder[cut],preorderSize-cut,&postorder[postcut+1],postorderSize-postcut-2);
#else
//printf("%d %d\n", cut, postorderSize );
head->left= constructFromPrePost(&preorder[1],cut-1,postorder,cut-1);
head->right= constructFromPrePost(&preorder[cut],preorderSize-cut,&postorder[cut-1],preorderSize-cut);

#endif
return head;
}

沒有留言:

張貼留言