LeetCode之将有序数组转换为二叉搜索树(一百零八)

举报
liuzhen007 发表于 2021/05/28 05:50:13 2021/05/28
【摘要】 目录   题目 解题 方法一、中序遍历 题目 (原题链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/) 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树...

目录

 

题目

解题

方法一、中序遍历


题目

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

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

解题

方法一、中序遍历

分析: 二叉搜索树的中序遍历是升序排列的,题目给定的数组是按照升序排序的有序数组,因此可以确定数组是某二叉搜索树的中序遍历序列。以数组中中间位置的元素为根结点,采用循环递归左右子树的方式构建高度平衡的二叉搜索树。

代码:


  
  1. class Solution {
  2. public:
  3. TreeNode* helper(vector<int>& nums, int left, int right) {
  4. if (left > right) {
  5. return nullptr;
  6. }
  7. // 总是选择中间位置右边的数字作为根节点
  8. int mid = (left + right + 1) / 2;
  9. TreeNode* root = new TreeNode(nums[mid]);
  10. root->left = helper(nums, left, mid - 1);
  11. root->right = helper(nums, mid + 1, right);
  12. return root;
  13. }
  14. TreeNode* sortedArrayToBST(vector<int>& nums) {
  15. return helper(nums, 0, nums.size() - 1);
  16. }
  17. };

执行结果:

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/107098922

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。