N3-1 - 数组 - convert-sorted-array-to-binary-search-tree
题目描述:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
升序数组,转二叉排序树
解题思路:
使用递归方法:
选取中间的节点作为root节点,其左侧的节点构成左子树(递归调用建树),右侧的节点构成右子树。
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &num) {
if(num.empty())
return nullptr;//树为空
return sortedArrayToBSTCore( num,0,num.size()-1);//对num取引用,避免了复制
}
TreeNode *sortedArrayToBSTCore(vector<int> &num, int begin,int end){
//递归建立二叉搜索树
if(end<begin)return nullptr;
//if(end==begin)return num[begin];//只有一个元素时不再递归调用子树。返回类型错误应该是 TreeNode *
//只有一个元素时,不会调用if,不再递归,返回一个节点。因此不用特殊判断该情况
int middle = (begin+end+1)/2; //取中间元素作为root节点,如果是偶数个元素,取中间偏后一个元素作为root节点
TreeNode *pRoot = new TreeNode (num[middle]);
if(middle>begin) //有左子树时
pRoot->left = sortedArrayToBSTCore(num,begin, middle-1); //middle已经被使用
if(middle<end)//有右子树
pRoot->right = sortedArrayToBSTCore(num,middle+1, end);
return pRoot;
}
};
注意:
1. 测试序列中,root的选择,当子树节点为奇数时,取中间即可(begin+end)/2,当子树节点为偶数时,取中间偏后的节点(begin+end+1)/2。由于整数除法,向下取整,可统一式子为(begin+end+1)/2。错误的写法(begin+end)/2+1;在奇数个节点时,在取了正中间节点的后一位。
2. 除2,可以使用右移>>。(更好一些)
N3-1 - 数组 - convert-sorted-array-to-binary-search-tree的更多相关文章
- [LeetCode] 108. Convert Sorted Array to Binary Search Tree ☆(升序数组转换成一个平衡二叉树)
108. Convert Sorted Array to Binary Search Tree 描述 Given an array where elements are sorted in ascen ...
- LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
108. 将有序数组转换为二叉搜索树 108. Convert Sorted Array to Binary Search Tree 题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索 ...
- 108. Convert Sorted Array to Binary Search Tree 109. Convert Sorted List to Binary Search Tree -- 将有序数组或有序链表转成平衡二叉排序树
108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...
- LeetCode 108. Convert Sorted Array to Binary Search Tree (将有序数组转换成BST)
108. Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascendin ...
- LeetCode:Convert Sorted Array to Binary Search Tree,Convert Sorted List to Binary Search Tree
LeetCode:Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in asce ...
- Convert Sorted Array to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
- 37. leetcode 108. Convert Sorted Array to Binary Search Tree
108. Convert Sorted Array to Binary Search Tree 思路:利用一个有序数组构建一个平衡二叉排序树.直接递归构建,取中间的元素为根节点,然后分别构建左子树和右 ...
- Convert Sorted List to Binary Search Tree&&Convert Sorted Array to Binary Search Tree——暴力解法
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
- LeetCode108——Convert Sorted Array to Binary Search Tree
题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...
- [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree
Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...
随机推荐
- Linux Storage Stack Diagram 4.0
https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram
- ionic3中使用自定义配置
新工作接触了ionic,以前没用过,只是离职前短暂接触过类似的vuex,到需要修改公司项目的时候临时差什么学什么,其中一个是自定义配置项 配置是很常见的设置,之前用的thinkphp的配置很清晰,基本 ...
- POJ 2079
呃,不知道我用的算不算卡壳,总有点枚举的意思. 先求凸包,然后,枚举其中一点,再枚举另一点作为结尾,这个向量旋转一周后,求出最大值面积.这里面用的是旋转卡壳判断的那个式子. PS:下一篇和这题是一样题 ...
- SQL优化(SQL TUNING)之10分钟完毕亿级数据量性能优化(SQL调优)
前几天.一个用户研发QQ找我,例如以下: 自由的海豚. 16:12:01 岛主,我的一条SQL查不出来结果,能帮我看看不? 兰花岛主 16:12:10 多久不出结果? 自由的海豚 16:12:17 多 ...
- ASP内置对象—Request、Response 、Server、Application 、ObjectContent (二)
Response (应答)对象 Request 对象.用于在HTTP请求期间,訪问不论什么client浏览器传递给server的信息,包含通过URL传递的參数信息.使用GET方法或POST方法传递的H ...
- 网络编程----堵塞、非堵塞和同步、异步IO
我是学渣.但我想进步. 本文是面试我的牛人问我的.你知道什么是堵塞.非堵塞和同步.异步IO么?自觉得是分布式系统程序猿的我居然不知道.学习吧. 首先介绍堵塞IO和非堵塞IO: 堵塞IO:是指说程序等待 ...
- 剖析Mysql的InnoDB索引
摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本 ...
- Mysql 索引需要了解的几个注意
索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行.表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快 ...
- Selenium API 介绍
Selenium API 介绍 我们先前学习过元素定位,大家不知道学习得怎么样了,当你学会元素定位之后就能够跟着我的脚步学习本节Selenium 经常使用的API 介绍 Seleium 为什么能模拟人 ...
- 获得拼凑SQL语句运行后的结果
拼凑式的SQL语句太普遍了,比如说,任意条件的查询. 这种拼凑SQL语句,如果在数据库端组装,必然是一条长长的字符串,然后 exec(@sql). 如果这条语句写在存储过程里边,存储过程的调用方会获得 ...