欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-03 16:51:44
...

问题描述

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

问题分析

分析题目,由于求的是二叉搜索树,我们立即想到二叉搜索树的性质:

  • 左子树的一切元素都比根节点小,右子树的一切元素都比根节点大,且所有的子树左右子树的节点数相差不超过1个。

结合题目所给的有序数组,很容易想到把数组从中间分成两半,中间的元素是根节点,左边的数组是左子树,右边的数组是右子树。

然后可以发现,这是经典的分治法。


解法:分治法

  • 时间复杂度:O( n ),其中n表示数组中元素的个数,。

Java代码

package com.company;

public class Main {

    static public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    public static void main(String[] args) {

        int[] ans = {-10, -3, 0, 5, 9};
        TreeNode root = sortedArrayToBST(ans);
        System.out.println(11);
    }

    static public TreeNode sortedArrayToBST(int[] nums) {
        int start = 0;
        int end = nums.length - 1;

        return ToBST(nums, start, end);
    }

    private static TreeNode ToBST(int[] nums, int start, int end) {

        if (start >= 0 && end <= nums.length - 1 && end >= start){
            int mid = (start + end + 1) / 2;
            TreeNode root = new TreeNode(nums[mid]);
            root.left = ToBST(nums, start, mid - 1);
            root.right = ToBST(nums, mid + 1, end);
            return root;
        }else {
            return null;
        }


    }
}

结果分析

以上代码的执行结果:

执行时间 内存消耗
0 ms 37.4 MB

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

相关标签: LeetCode 分治法