108. 将有序数组转换为二叉搜索树

题目:

思路:

【1】因为 题目要求 高度平衡,所以两边的层数大致要一致,那么如何一致呢,就是划分的左右子树的节点数大概也是差不多的,这样一想用二分就可以了,中间结点为根结点,然后分出来的两边又会再次形成原本的小问题(递归的做法)

代码展示:

//时间0 ms 击败 100%
//内存42.1 MB 击败 54.36%
//时间复杂度:O(n),其中 n 是数组的长度。每个数字只访问一次。
//空间复杂度:O(log⁡n),其中 n 是数组的长度。
//空间复杂度不考虑返回值,因此空间复杂度主要取决于递归栈的深度,递归栈的深度是 O(log⁡n)。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        if (nums.length == 0) return null;
        if (nums.length == 1) return new TreeNode(nums[0]);
        return arrayToBST(nums,0,nums.length-1);
    }
    
    private TreeNode arrayToBST(int[] nums, int left, int right){
        if (left == right) return new TreeNode(nums[left]);
        int mid = left + (right-left)/2;
        TreeNode root =  new TreeNode(nums[mid]);
        if (mid != left){
            root.left = arrayToBST(nums,left,mid-1);
        }
        if (mid != right){
            root.right = arrayToBST(nums,mid+1,right);
        }
        return root;
    }
}

 

posted @ 2023-07-14 16:38  忧愁的chafry  阅读(5)  评论(0编辑  收藏  举报