Loading

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

题目

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

思路(中序遍历的递归)

  • 中序遍历,选择中间位置作为根节点
  • 二叉搜索树的中序遍历是升序的,所以我们可以根据升序遍历来恢复二叉搜索树
  • 又因为是要平衡的,所以我们选取数组中间位置的值创建节点

代码

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return transform(nums, 0, nums.length-1);
    }

    private TreeNode transform(int[] nums, int left, int right) {
        // left等于right时也要判断
        if (left <= right) {
            int mid = (left + right) / 2;
            TreeNode node = new TreeNode(nums[mid]);
            // 构建左右子树
            node.left = transform(nums, left, mid-1);
            node.right = transform(nums, mid+1, right);
            // 返回组装好的节点
            return node;
        } else {
            return null;
        }
    }
}

复杂度分析

  • 时间复杂度:\(O(N)\),其中 N 为树的节点数量
  • 空间复杂度:\(O(logN)\),其中 N 为树的节点数量,因为递归的最大深度就是树的高度,因此为logN
posted @ 2020-11-22 18:49  linzeliang  阅读(87)  评论(0)    收藏  举报