解题思路
利用深度优先遍历,每次都取出中间数作为根节点
最开始取数组中间数作为根节点,然后以该中间数左右分割出两个子数组
左边的子数组就是左子树的数组,右边的子数组就是右子树的数组
然后再根据各个子树对应的数组去取出中间数作为子树的根节点,以此类推
代码
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return dfs(nums, 0, nums.length - 1);
}
private TreeNode dfs(int[] nums, int start, int end) {
if (start > end) {
return null;
}
int mid = (start + end) / 2;
TreeNode root = new TreeNode(nums[mid]);
root.left = dfs(nums, start, mid - 1);
root.right = dfs(nums, mid + 1, end);
return root;
}
}