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

作者: Shimmer_ | 来源:发表于2021-03-24 19:30 被阅读0次

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

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

    https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/

    示例1:

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

         0                   0
        / \                 / \
      -3   9    或        -10  5
      /   /                 \  \
    -10  5                  -3  9
    

    示例2:

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

    提示:

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

    Java解法

    思路:

    • 高度平衡意味着左右子树长度差不多,对于原始数组来说==[(左子树)root (右子树)]
    • 数组严格递增,实际就相当于不断得切分数组,在创建节点时保证左<根<右
    package sj.shimmer.algorithm.m3_2021;
    
    import sj.shimmer.algorithm.TreeNode;
    
    /**
     * Created by SJ on 2021/3/22.
     */
    
    class D56 {
        public static void main(String[] args) {
            TreeNode treeNode = sortedArrayToBST(new int[]{-10, -3, 0, 5, 9});
            TreeNode.getIntegerArray(treeNode);
        }
        public static TreeNode sortedArrayToBST(int[] nums) {
    
            return sortedArrayToBST(nums,0,nums.length-1);
        }
        public static TreeNode sortedArrayToBST(int[] nums,int start,int end) {
            TreeNode root = null;
            if (start<=end) {
                int mid = (start + end) / 2;
                root = new TreeNode(nums[mid]);
                root.left= sortedArrayToBST(nums,start,mid-1);
                root.right= sortedArrayToBST(nums,mid+1,end);
            }
            return root;
        }
    }
    
    image

    官方解

    https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/solution/jiang-you-xu-shu-zu-zhuan-huan-wei-er-cha-sou-s-33/

    1. 中序遍历,总是选择中间位置左边的数字作为根节点

      选择中间位置左边的数字作为根节点 ,与我的解法一致

      • 时间复杂度: O(n)
      • 空间复杂度:O(logn)
    2. 中序遍历,总是选择中间位置右边的数字作为根节点

    3. 中序遍历,选择任意一个中间位置数字作为根节点

    相关文章

      网友评论

        本文标题:Day56 将有序数组转换为二叉搜索树

        本文链接:https://www.haomeiwen.com/subject/aznhhltx.html