题目描述:

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,可以使用右移>>。(更好一些)

最新文章

  1. (转)利用libcurl和国内著名的两个物联网云端通讯的例程, ubuntu和openwrt下调试成功(四)
  2. js自动提示查询添加功能(不是自动补全)
  3. 一个App Widget实例第一次创建时被调用
  4. Qt 多线程和网络编程学习
  5. mybaits3.2.8 别名包扫描通配符
  6. webstorm 添加文件模板
  7. 给自己保存份CSS初始值样式
  8. PQ分区魔术师v9.0 中文版
  9. 51 Nod 1119
  10. Java编程思想 - 第11章 持有对象
  11. 补码的来源以及为什么byte的最小值是-128
  12. webpack4+node合并资源请求, 实现combo功能(二十三)
  13. Effective Java 第三版——56. 为所有已公开的API元素编写文档注释
  14. CentOS 7 配置HTTPS加密访问SVN
  15. 面试官提出的问题应该怎么答?(如开发中使用过EasyUI吗?)
  16. js的回调函数详解
  17. 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍
  18. execvp php-fpm reload使用的函数
  19. Linux strace命令详解
  20. C# 程序执行时间差

热门文章

  1. ASP.NET--MVC--伪静态
  2. Docker--在ubuntu中的操作
  3. uva:10763 - Foreign Exchange(排序)
  4. Android入门:短信和拨打电话
  5. HDOJ GCD 2588【欧拉函数】
  6. 去哪网实习总结:JavaWeb配置404页面(JavaWeb)
  7. Mina airQQ聊天开门见山篇(一)
  8. hdu5355 Cake
  9. xml配置文件中的转义字符
  10. 详解Google第二代TPU 既能推理又能训练 性能霸道