加载中...
108-将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree)
发表于:2021-12-03 | 分类: 简单
字数统计: 290 | 阅读时长: 1分钟 | 阅读量:

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

英文原文

Given an integer array nums where the elements are sorted in ascending order, convert it to a height-balanced binary search tree.

A height-balanced binary tree is a binary tree in which the depth of the two subtrees of every node never differs by more than one.

 

Example 1:

Input: nums = [-10,-3,0,5,9]
Output: [0,-3,9,-10,null,5]
Explanation: [0,-10,5,null,-3,null,9] is also accepted:

Example 2:

Input: nums = [1,3]
Output: [3,1]
Explanation: [1,3] and [3,1] are both a height-balanced BSTs.

 

Constraints:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums is sorted in a strictly increasing order.

中文题目

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

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

 

示例 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,3] 和 [3,1] 都是高度平衡二叉搜索树。

 

提示:

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

通过代码

高赞题解

🙋 今日打卡!

今天题目友好度百分百啊,大家伙儿七月打卡加油鸭 > <


一、题目分析

题意:根据升序数组,恢复一棵高度平衡的BST🌲。

分析:BST的中序遍历是升序的,因此本题等同于根据中序遍历的序列恢复二叉搜索树。因此我们可以以升序序列中的任一个元素作为根节点,以该元素左边的升序序列构建左子树,以该元素右边的升序序列构建右子树,这样得到的树就是一棵二叉搜索树啦~ 又因为本题要求高度平衡,因此我们需要选择升序序列的中间元素作为根节点奥~

二、具体实现

[]
class Solution { public TreeNode sortedArrayToBST(int[] nums) { return dfs(nums, 0, nums.length - 1); } private TreeNode dfs(int[] nums, int lo, int hi) { if (lo > hi) { return null; } // 以升序数组的中间元素作为根节点 root。 int mid = lo + (hi - lo) / 2; TreeNode root = new TreeNode(nums[mid]); // 递归的构建 root 的左子树与右子树。 root.left = dfs(nums, lo, mid - 1); root.right = dfs(nums, mid + 1, hi); return root; } }

三、题目拓展

109. 有序链表转换二叉搜索树 将本题的数组换成了链表,做法完全一样,不过链表无法像数组一样直接索引到中间元素,链表找中间节点可以用快慢指针法,详见 876. 链表的中间结点

统计信息

通过次数 提交次数 AC比率
206734 271592 76.1%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言

相似题目

题目 难度
有序链表转换二叉搜索树 中等
上一篇:
107-二叉树的层序遍历 II(Binary Tree Level Order Traversal II)
下一篇:
109-有序链表转换二叉搜索树(Convert Sorted List to Binary Search Tree)
本文目录
本文目录