示例#1
0
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;
 }
示例#3
0
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);
    }