题目传送: ​​https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/​

运行效率

Leetcode108. 将有序数组转换为二叉搜索树_递归


思路: 因为题目说是为了还原二叉平衡树,也就是说左右子树的节点个数尽可能的相同。 于是我们不如选择中间位置的节点为根节点来构造这棵树。

代码如下:

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