void BuildBST(int* array, int start, int end, Node *&node) { if (end - start == 1) { Node* rightNode = new Node{ nullptr, nullptr, array[end] }; node = new Node{ nullptr, rightNode, array[start] }; return; } if (end == start) { node = new Node{ nullptr, nullptr, array[start] }; return; } int middle = (start + end) / 2; if (node == nullptr) { node = new Node{ nullptr, nullptr, array[middle] }; } else { node->Value = array[middle]; } BuildBST(array, start, middle - 1, node->Left); BuildBST(array, middle + 1, end, node->Right); }
TreeNode* BuildBST(ListNode*& list, int start, int end) { // DO NOT FORGET & !!! if (start > end) return NULL; int mid = (start + end) / 2; //if use start + (end - start) >> 1, test case will break, strange! TreeNode* leftChild = BuildBST(list, start, mid - 1); TreeNode* parent = new TreeNode(list->val); parent->left = leftChild; list = list->next; parent->right = BuildBST(list, mid + 1, end); return parent; }
int _tmain(int argc, _TCHAR* argv[]) { int input[size] = { 0, 1, 2, 3, 4, 5 }; Node* root = new Node(); BuildBST(input, 0, size - 1, root); return 0; }
TreeNode* sortedListToBST(ListNode* head) { int len = 0; ListNode* p = head; while (p) { len++; p = p->next; } return BuildBST(head, 0, len - 1); }