108. Convert Sorted Array to Binary Search Tree(分割点作为当前节点,然后递归左区间和右区间)
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。
分割点就是数组中间位置的节点。
那么为问题来了,如果数组长度为偶数,中间节点有两个,取哪一个?
取哪一个都可以,只不过构成了不同的平衡二叉搜索树。
例如:输入:[-10,-3,0,5,9]
如下两棵树,都是这个数组的平衡二叉搜索树:
如果要分割的数组长度为偶数的时候,中间元素为两个,是取左边元素 就是树1,取右边元素就是树2。
这也是题目中强调答案不是唯一的原因。 理解这一点,这道题目算是理解到位了
作者:carlsun-2
链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/solution/108-gou-zao-er-cha-sou-suo-shu-di-gui-di-vqi5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 class Solution { 2 public: 3 TreeNode* make_tree(vector<int>& nums, int left, int right) { 4 if(left > right) { 5 return nullptr; 6 } 7 int mid = left + (right - left) / 2; 8 TreeNode* root = new TreeNode(nums[mid]); 9 root->left = make_tree(nums,left,mid-1); 10 root->right = make_tree(nums,mid+1,right); 11 return root; 12 } 13 TreeNode* sortedArrayToBST(vector<int>& nums) { 14 return make_tree(nums,0,nums.size() -1); 15 } 16 };