108.将有序数组转换为二叉搜索树
108.1 题目
给你一个整数数组 nums,其中元素已经按升序排列,请你将其转换为一棵平衡二叉搜索树。
示例 1:

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

输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
- 1 <= nums.length <= 10^4
- -10^4 <= nums[i] <= 10^4
- nums按严格递增顺序排列
108.2 题解
递归法
// 方法一:递归法
// 将有序数组转换为高度平衡的二叉搜索树
static TreeNode SortedArrayToBST1(int[] nums)
{
    // 调用递归函数构建二叉搜索树
    return Helper1(nums, 0, nums.Length - 1);
}
// 辅助递归函数
static TreeNode Helper1(int[] nums, int left, int right)
{
    // 当 left 大于 right 时,返回 null
    if (left > right) return null;
    // 选择中间元素作为根节点
    int mid = left + (right - left) / 2;
    TreeNode node = new TreeNode(nums[mid]);
    // 递归构建左子树
    node.left = Helper1(nums, left, mid - 1);
    // 递归构建右子树
    node.right = Helper1(nums, mid + 1, right);
    // 返回当前构建的节点
    return node;
}
108.3 代码
using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        #region 题目
        // 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵
        // 平衡 二叉搜索树。
        //
        // 示例 1:
        //
        // 输入:nums = [-10,-3,0,5,9]
        // 输出:[0,-3,9,-10,null,5]
        // 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
        //
        // 示例 2:
        //
        // 输入:nums = [1,3]
        // 输出:[3,1]
        // 解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
        //
        // 提示:
        // 1 <= nums.length <= 104
        // -104 <= nums[i] <= 104
        // nums 按 严格递增 顺序排列
        #endregion
        #region 测试
        // 示例 1
        int[] nums1 = { -10, -3, 0, 5, 9 };
        TreeNode result1_1 = SortedArrayToBST1(nums1);
        Console.WriteLine("示例1 方法1 输出:");
        PrintTree(result1_1);
        // 示例 2
        int[] nums2 = { 1, 3 };
        TreeNode result2_1 = SortedArrayToBST1(nums2);
        Console.WriteLine("示例2 方法1 输出:");
        PrintTree(result2_1);
        #endregion
    }
    #region 答案
    // TreeNode 类定义
    public class TreeNode
    {
        public int val;
        public TreeNode left;
        public TreeNode right;
        public TreeNode(int x)
        {
            val = x;
        }
    }
    // 方法一:递归法
    // 将有序数组转换为高度平衡的二叉搜索树
    static TreeNode SortedArrayToBST1(int[] nums)
    {
        // 调用递归函数构建二叉搜索树
        return Helper1(nums, 0, nums.Length - 1);
    }
    // 辅助递归函数
    static TreeNode Helper1(int[] nums, int left, int right)
    {
        // 当 left 大于 right 时,返回 null
        if (left > right) return null;
        // 选择中间元素作为根节点
        int mid = left + (right - left) / 2;
        TreeNode node = new TreeNode(nums[mid]);
        // 递归构建左子树
        node.left = Helper1(nums, left, mid - 1);
        // 递归构建右子树
        node.right = Helper1(nums, mid + 1, right);
        // 返回当前构建的节点
        return node;
    }
    // 打印二叉树(层次遍历)
    static void PrintTree(TreeNode root)
    {
        if (root == null)
        {
            Console.WriteLine("null");
            return;
        }
        Queue<TreeNode> queue = new Queue<TreeNode>();
        queue.Enqueue(root);
        while (queue.Count > 0)
        {
            TreeNode current = queue.Dequeue();
            if (current == null)
            {
                Console.Write("null ");
                continue;
            }
            Console.Write(current.val + " ");
            queue.Enqueue(current.left);
            queue.Enqueue(current.right);
        }
        Console.WriteLine();
    }
    #endregion
}
108.4 运行结果
示例1 方法1 输出:
0 -10 5 null -3 null 9 null null null null 
示例2 方法1 输出:
1 null 3 null null 
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com
 
            