Cover image for Interview Classic 150 Questions P108 Convert Sorted Array to Binary Search Tree

Interview Classic 150 Questions P108 Convert Sorted Array to Binary Search Tree


Timeline

Timeline

2025-12-01

init

Divide and Conquer, BST

Problem:

Divide and Conquer approach:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
#include <vector>using std::vector;struct TreeNode {	int val;	TreeNode *left;	TreeNode *right;	TreeNode()		: val(0)		, left(nullptr)		, right(nullptr)	{	}	TreeNode(int x)		: val(x)		, left(nullptr)		, right(nullptr)	{	}	TreeNode(int x, TreeNode *left, TreeNode *right)		: val(x)		, left(left)		, right(right)	{	}};class Solution {    private:	TreeNode *buildBST(vector<int> &nums, int begin, int end)	{		if (end < begin) {			return NULL;		}		// The inorder traversal result is a monotonically increasing sequence		TreeNode *root = new TreeNode;		int middle = (begin + end) / 2;		root->val = nums[middle];		root->left = buildBST(nums, begin, middle - 1);		root->right = buildBST(nums, middle + 1, end);		return root;	}    public:	TreeNode *sortedArrayToBST(vector<int> &nums)	{		return buildBST(nums, 0, nums.size() - 1);	}};

leetcode hot 100 rewrite

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
struct TreeNode {        int val;        TreeNode *left;        TreeNode *right;        TreeNode()                : val(0)                , left(nullptr)                , right(nullptr)        {        }        TreeNode(int x)                : val(x)                , left(nullptr)                , right(nullptr)        {        }        TreeNode(int x, TreeNode *left, TreeNode *right)                : val(x)                , left(left)                , right(right)        {        }};#include <vector>using std::vector;class Solution {    private:        TreeNode *buildBST(vector<int> &nums, int start, int end)        {                if (start > end)                        return nullptr;                int mid = (start + end) / 2;                TreeNode *root = new TreeNode(nums[mid]);                root->left = buildBST(nums, start, mid - 1);                root->right = buildBST(nums, mid + 1, end);                return root;        }    public:        TreeNode *sortedArrayToBST(vector<int> &nums)        {                return buildBST(nums, 0, nums.size() - 1);        }};
Loading comments…