左边一半归左子树,右边一半归右子树
class Solution { public TreeNode sortedArrayToBST(int[] nums) { if(nums.length == 0) return null; return buildFromArray(nums, 0, nums.length); } //把nums中从[begin, end)的数字转换为二叉搜索树 //中间的数字作为根节点,左边一半作为左子树,右边一半作为右子树 public TreeNode buildFromArray(int[] nums, int begin, int end){ int mid = begin + (end - begin)/2; TreeNode root = new TreeNode(nums[mid]); //begin 到 mid-1 这一段还有数吗,有的话作为左子树 if(mid != begin) root.left = buildFromArray(nums, begin, mid); //mid 到 end-1 这一段还有数吗,有的话作为右子树 if(mid+1 != end) root.right = buildFromArray(nums, mid+1, end); /* 至于判断中为什么 mid != begin 而 mid != end-1 举个简单的例子就知道啦! 通过数组中前三个元素构造数,因为我们是左闭右开的,所以 begin = 1, end = 4 => mid = 2 那么,nums[2]作为根节点 从1(begin)到2(mid)构成左子树,mid大于begin即可 从3(mid+1)到4(end)构成右子树,mid+1要小于end 时刻注意:我们是左闭右开!!!! */ return root; } }