二叉树的建立方式是不唯一的,因此这里我们不同的方法建立的二叉树也是不一致的
这里我用的方法是二分法取中间元素建立当前叶子节点
时间O(n)(每个元素都需要遍历一遍),空间O(logn)(本次建立的二叉树要保持平衡,所以树的高度固定为logn)
class Solution { public TreeNode sortedArrayToBST(int[] nums) { return def(0,nums.length-1,nums); } public TreeNode def(int left,int right,int[] nums){ // 递归结束条件 if (left>right) return null; int mid = (left+right)/2; TreeNode temp = new TreeNode(nums[mid]); temp.left=def(left,mid-1,nums); temp.right=def(mid+1,right,nums); return temp; } }