给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

    高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

    示例 1:
    image.png

    输入:nums = [-10,-3,0,5,9]
    输出:[0,-3,9,-10,null,5]
    解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

    示例 2:

    输入:nums = [1,3]
    输出:[3,1]
    解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

    提示:

    1 <= nums.length <= 104
    -104 <= nums[i] <= 104
    nums 按 严格递增 顺序排列


    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode() {}
    8. * TreeNode(int val) { this.val = val; }
    9. * TreeNode(int val, TreeNode left, TreeNode right) {
    10. * this.val = val;
    11. * this.left = left;
    12. * this.right = right;
    13. * }
    14. * }
    15. */
    16. class Solution {
    17. public TreeNode sortedArrayToBST(int[] nums) {
    18. return dfs(nums, 0, nums.length - 1);
    19. }
    20. private TreeNode dfs(int[] nums, int lo, int hi) {
    21. if (lo > hi) {
    22. return null;
    23. }
    24. // 以升序数组的中间元素作为根节点 root。
    25. int mid = lo + (hi - lo) / 2;
    26. TreeNode root = new TreeNode(nums[mid]);
    27. // 递归的构建 root 的左子树与右子树。
    28. root.left = dfs(nums, lo, mid - 1);
    29. root.right = dfs(nums, mid + 1, hi);
    30. return root;
    31. }
    32. }