题目传送: https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/
运行效率
思路: 因为题目说是为了还原二叉平衡树,也就是说左右子树的节点个数尽可能的相同。 于是我们不如选择中间位置的节点为根节点来构造这棵树。
代码如下:
public TreeNode sortedArrayToBST(int[] nums) {
TreeNode helper = helper(nums, 0, nums.length - 1);
return helper;
}
public TreeNode helper(int[] nums, int start, int end) {
//处理边界情况
if(start>end){
return null;
}
if(start==end){
TreeNode treeNode = new TreeNode(nums[start]);
return treeNode;
}
//以中间位置的节点为根节点
int mid=(start+end)/2;
//构建根节点
TreeNode root = new TreeNode(nums[mid]);
//递归构建左子树
TreeNode leftChild = helper(nums, start, mid - 1);
//递归构建右子树
TreeNode rightChild = helper(nums, mid + 1, end);
root.left=leftChild;
root.right=rightChild;
return root;
}