【二叉树】Leetcode 108. 将有序数组转换为二叉搜索树【简单】

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

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

示例1:
在这里插入图片描述
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案

解题思路

将一个有序数组转换为平衡二叉搜索树,可以通过递归方式来实现。

  • 1、选择数组的中间元素作为根节点,将其值赋给根节点。
  • 2、将数组分成左右两部分,左边部分构成左子树,右边部分构成右子树。
  • 3、递归地对左右子数组进行构建平衡二叉搜索树的操作。

Java实现

public class SortedArrayToBST {

    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int val) {
            this.val = val;
        }
    }

    public TreeNode sortedArrayToBST(int[] nums) {
        if (nums == null || nums.length == 0) {
            return null;
        }

        return sortedArrayToBST(nums, 0, nums.length - 1);
    }

    private TreeNode sortedArrayToBST(int[] nums, int start, int end) {
        if (start > end) {
            return null;
        }

        // 选择中间元素作为根节点
        int mid = (start + end) / 2;
        TreeNode root = new TreeNode(nums[mid]);

        // 递归构建左右子树
        root.left = sortedArrayToBST(nums, start, mid - 1);
        root.right = sortedArrayToBST(nums, mid + 1, end);

        return root;
    }

    // 测试示例
    public static void main(String[] args) {
        SortedArrayToBST converter = new SortedArrayToBST();

        // 示例数组
        int[] nums = {-10, -3, 0, 5, 9};

        // 转换为二叉搜索树
        TreeNode resultTree = converter.sortedArrayToBST(nums);

        // 打印中序遍历结果验证
        System.out.println("Inorder traversal of the constructed BST:");
        inorderTraversal(resultTree);
    }

    private static void inorderTraversal(TreeNode root) {
        if (root != null) {
            inorderTraversal(root.left);
            System.out.print(root.val + " ");
            inorderTraversal(root.right);
        }
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中n是数组的长度,每个元素都需要访问一次。
  • 空间复杂度:O(log n),递归调用栈的深度为树的高度。

算法目录导航栏

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 11:44:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 11:44:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 11:44:03       82 阅读
  4. Python语言-面向对象

    2024-03-28 11:44:03       91 阅读

热门阅读

  1. 网站建设服务器怎么选

    2024-03-28 11:44:03       47 阅读
  2. 函数 GetMemoryType 的理解

    2024-03-28 11:44:03       41 阅读
  3. linux进程切换

    2024-03-28 11:44:03       44 阅读
  4. 【C语言】RC4 测试代码

    2024-03-28 11:44:03       45 阅读
  5. el-upload上传文件前端自己读取excel

    2024-03-28 11:44:03       38 阅读
  6. uniapp H5 开发,公众号时请求跨域了,要用proxy

    2024-03-28 11:44:03       43 阅读
  7. Nginx服务

    2024-03-28 11:44:03       42 阅读
  8. Docker Compose 中的网络配置和优先级管理

    2024-03-28 11:44:03       44 阅读
  9. 无感刷新token

    2024-03-28 11:44:03       45 阅读
  10. CSS选择器 个人练习笔记

    2024-03-28 11:44:03       42 阅读