原题链接:108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)
题目描述:
思路分析:
今天这道题比较简单,我们看一下数组和树之间的联系很容易就能发现规律。
通过简单观察我们发现,位于数组中间的数据恰好是根节点,位于根节点之前的数据就是左子树,位于根节点之后的数据就是右子树,所以我们可以将构造二叉搜索树的步骤分为两大步:
1、寻找根节点,也就是寻找数组中间的数据,这个过程很简单
2、构造左子树和右子树,根据根节点的位置,将数组划分为两个区间再构造新节点
代码示例:
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
if(nums.length == 0) return null;
TreeNode root = createTree(nums,0,nums.length-1);
return root;
}
public TreeNode createTree(int[] nums,int beg, int end) {
if(beg > end) return null;
int mid = beg+(end-beg)/2;
TreeNode root = new TreeNode(nums[mid]);
root.left = createTree(nums,beg,mid-1);
root.right = createTree(nums,mid+1,end);
return root;
}
}