leetcode题解108-将有序数组转换为二叉排序树
发布日期:2025-04-05 04:51:33 浏览次数:8 分类:精选文章

本文共 1297 字,大约阅读时间需要 4 分钟。

要解决将已排序的整数数组转换为高度平衡二叉搜索树的问题,我们可以采用折半查找的方法。这种方法确保每次选择中间元素作为根节点,从而使得左右子树高度差不超过1,满足高度平衡的条件。

解题思路

  • 高度平衡的定义:每个节点的左右子树高度差不超过1。
  • 折半查找方法:每次选择数组中间的元素作为根节点,左边构建左子树,右边构建右子树。这样左右子树的规模大致相同,满足高度平衡条件。
  • 递归构建:从根节点开始,递归处理左右子树,直到所有元素处理完毕。
  • 解决代码

    import java.util.ArrayDeque;import java.util.Queue;class Solution {    public int[] arr;    public TreeNode genBinaryTree(int low, int high) {        if (low > high) {            return null;        }        if (low == high) {            return new TreeNode(arr[low]);        }        int mid = (low + high + 1) / 2;        TreeNode root = new TreeNode(arr[mid]);        root.left = genBinaryTree(low, mid - 1);        root.right = genBinaryTree(mid + 1, high);        return root;    }    public TreeNode sortedArrayToBST(int[] nums) {        int len = nums.length;        if (len == 0) {            return null;        }        this.arr = nums;        return genBinaryTree(0, len - 1);    }}class TreeNode {    public int val;    public TreeNode left;    public TreeNode right;    public TreeNode(int val) {        this.val = val;        left = null;        right = null;    }}

    代码解释

  • TreeNode类:定义了二叉树的节点结构,包含值、左子节点和右子节点。
  • genBinaryTree函数:递归构建二叉树。计算中间元素作为根节点,然后递归处理左右子数组。
  • sortedArrayToBST函数:初始化数组,并调用genBinaryTree函数生成二叉树。
  • 该方法确保每次选取中间元素,构造出的树满足高度平衡条件,左边和右边的子树高度差不超过1,从而高效地解决问题。

    上一篇:leetcode题解118-杨辉三角
    下一篇:leetcode题解104- 二叉树的最大深度

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年05月12日 22时15分43秒