108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组
: [-10,-3,0,5,9],
一个可能的答案是:
[0,-3,9,-10,null
,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
思路
左右高度不差一,首先想到的就是从中间分开,中间的作为根节点,左边的数作为左孩子,右边的数作为右孩子,肯定不会超过一。
代码
class Solution {
public:
TreeNode
* sortedArrayToBST(vector
<int>& nums
) {
return sortedArray(nums
,0,nums
.size());
}
TreeNode
* sortedArray(vector
<int>& nums
, int left
,int right
){
if(left
== right
) return NULL;
int p
= left
+ (right
- left
)/2;
TreeNode
* root
=new TreeNode(nums
[p
]);
root
->left
= sortedArray(nums
,left
,p
);
root
->right
= sortedArray(nums
,p
+1,right
);
return root
;
}
};