int main(int argc, char* argv[]) { struct node* a = buildBSTree(); struct node* b = buildBSTree(); if (sameTree(a, b)) { printf("match\n"); } else { printf("no match\n"); } }
struct TreeNode *buildBSTree(int *nums, int numsSize) { if (nums == NULL || numsSize <= 0) { return NULL; } int idx = numsSize / 2; // prefer this one, left compact // int idx = (numsSize - 1) / 2; // to match leetcode's result struct TreeNode *n = malloc(sizeof(struct TreeNode)); n->val = nums[idx]; n->left = buildBSTree(nums, idx); n->right = buildBSTree(nums + idx + 1, numsSize - idx - 1); return n; }
// This is bad performance, keep same formal as ar2tree.108.c struct TreeNode *buildBSTree(struct ListNode *head, int len) { if (head == NULL || len == 0) { return NULL; } int idx = len / 2; // prefer this one, left compact // int idx = (numsSize - 1) / 2; // to match leetcode's result struct TreeNode *n = malloc(sizeof(struct TreeNode)); struct ListNode *ln = list_index(head, idx); n->val = ln->val; n->left = buildBSTree(head, idx); n->right = buildBSTree(ln->next, len - idx - 1); return n; }
struct TreeNode *sortedArrayToBST(int *nums, int numsSize) { return buildBSTree(nums, numsSize); }
int main(int argc, char* argv[]) { struct node* root = buildBSTree(); printPostorder(root); }
struct TreeNode *sortedListToBST(struct ListNode *head) { int len = list_length(head); return buildBSTree(head, len); }