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

题目
给一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。
高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

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

题解

二叉搜索树的中序遍历是升序序列,题目给出的数组是升序数组,故该数组即为二叉搜索树的中序遍历序列。而又要求二叉搜索树高度平衡,则应该把数组的中间数字作为树的根节点,其余数字分别位于左右子树中,递归创建平衡二叉搜索树,递归的边界条件是该树为空。
考虑到数组元素个数奇偶性,若为奇数,则数组的中间数字唯一,作为根节点,左右子树个数相等;若为偶数,则数组的中间数字不唯一,可以任选靠左或靠右的元素,左右子树个数相差1。

更多题解

代码

  1. 当 left>right 时树为空,结束递归
  2. rand()%2 结果随机为0或1
class Solution {public:TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums,0,nums.size()-1);}//递归构造高度平衡二叉搜索树TreeNode* helper(vector<int>& nums,int left,int right){//判空if(left>right){return nullptr;}//取数组中间元素作为根节点int mid = (left + right + rand() % 2) / 2;TreeNode* root=new TreeNode(nums[mid]);//递归构造左子树root->left=helper(nums,left,mid-1);//递归构造右子树root->right=helper(nums,mid+1,right);return root;}
};

LeetCode-108相关推荐

  1. 【数组递归构造二叉树】LeetCode 108. Convert Sorted Array to Binary Search Tree

    LeetCode 108. Convert Sorted Array to Binary Search Tree Solution1:我的答案 构造二叉树利用递归 /*** Definition fo ...

  2. leetcode 108. Convert Sorted Array to Binary Search Tree | 108. 将有序数组转换为二叉搜索树(Java)

    题目 https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 题解 经典二分,不解释了,直接看代码 /*** ...

  3. LeetCode: 108. Convert Sorted Array to Binary Search Tree

    题目 Given an array where elements are sorted in ascending order, convert it to a height balanced BST. ...

  4. [leetcode] 108.有序数组转换为二叉搜索树

    给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树. 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树. 示例 ...

  5. LeetCode 108. Convert Sorted Array to Binary Search Tree

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...

  6. LeetCode: 109. Convert Sorted List to Binary Search Tree

    题目 Given a singly linked list where elements are sorted in ascending order, convert it to a height b ...

  7. 二叉搜索树的插入、删除、修剪、构造操作(leetcode701、450、669、108)

    目录 1.leetcode 701. 二叉搜索树中的插入操作 1.题目 2.递归法 3.迭代法 2.leetcode 450. 二叉搜索树中的插入操作 1.题目 2.思路+递归法 3.迭代法 4.删除 ...

  8. LeetCode 109. 有序链表转换二叉搜索树(快慢指针+递归)

    1. 题目 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 来源:力扣(LeetC ...

  9. leetcode题解(二叉树和递归问题)

    这篇博客我们主要来看二叉树和二叉树问题中使用递归来解决问题的思路.这类问题有时思路很简单,这是因为二叉树具有天然的递归结构,所以我们使用递归的解法解决二叉树有关的问题就变得非常明显. 二叉树天然的递归 ...

  10. LeetCode题解目录

    最新更新于2020.11.27 前往LeetCode主页. 前往GitHub源码.(服务器原因,暂停同步.) 前往码云主页. 已解决 456/1878 - 简单353 中等 90 困难 13 2020 ...

最新文章

  1. 干货 | 6 种激活函数核心知识点,请务必掌握!
  2. hive币2021年预计涨到多少_比特币突破4万美元,比特币2021年会涨到多少?
  3. 前端学习(2441):删除处理完成
  4. Ubuntu下安装Gerrit
  5. 用CSS让文字居于div的底部
  6. **python基础函数(十一)
  7. java把对象放入数组_如何将对象添加到数组
  8. vue + wangeditor封装富文本组件
  9. SoundSource for Mac - 音频控制工具
  10. 微信视频号视频或直播预约二维码如何生成?
  11. css代码实现3D动画翻转 - 鱿鱼游戏卡片制作
  12. 统计文本大写字母和小写字母和数字和其他字符的个数
  13. 比较两种计算机语言的英语论文,英语计算机论文大纲模板样本 英语计算机论文提纲怎样写...
  14. 沈阳网赛1003 HDU 5894 hannnnah_j’s Biological Test
  15. 《地球毁灭日》4毁灭与希望
  16. 9-2 什么是零点漂移?产生零点漂移的主要原因是什么?差动放大电路为什么能抑制零点漂移?
  17. centos7里没有ifcfg-eth0只有 ifcfg-ens33(没有Eth0网卡)
  18. 【OpenCV】SURF图像拼接和Stitcher拼接
  19. ​深度学习-关于图像分类的经典10篇文章
  20. word中如何设置首页无页码,页码从第二页开始?(前两页页码格式与后文不同)

热门文章

  1. Android混淆总结篇(一)
  2. 美国约翰斯·霍普金斯大学全球新冠疫情统计数据网址
  3. CVF2020邻域自适应/语义分割:FDA: Fourier Domain Adaptation for Semantic SegmentationFDA:用于语义分割的傅立叶域自适应算法
  4. el-dialog内的el-table实现自适应高度
  5. 蓝屏代码: DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS bootsafe64.sys
  6. 集线器、网桥、交换机简介
  7. 集线器,转发器,网桥,以太网交换机
  8. 解决‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  9. 解密Uber自动驾驶系统,警方披露撞人案细节
  10. Oracle官方JDBC jar包下载