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 };

 

posted @ 2017-10-30 10:17  乐乐章  阅读(145)  评论(0编辑  收藏  举报