Easy!

题目描述:

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

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

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

      0
/ \
-3 9
/ /
-10 5

解题思路:

这道题是要将有序数组转为二叉搜索树,所谓二叉搜索树,是一种始终满足左<根<右(另外一种更直白的解释,二叉搜索树:空树或者二叉树的所有节点比他的左子节点大,比他的右子节点小。)的特性的二叉树,如果将二叉搜索树按中序遍历的话,得到的就是一个有序数组了。那么反过来,我们可以得知,根节点应该是有序数组的中间点,从中间点分开为左右两个有序数组,在分别找出其中间点作为原中间点的左右两个子节点,这不就是二分查找法的核心思想么。所以这道题考的就是二分查找法

C++解法一:

 /**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &num) {
return sortedArrayToBST(num, , num.size() - );
}
TreeNode *sortedArrayToBST(vector<int> &num, int left, int right) {
if (left > right) return NULL;
int mid = (left + right) / ;
TreeNode *cur = new TreeNode(num[mid]);
cur->left = sortedArrayToBST(num, left, mid - );
cur->right = sortedArrayToBST(num, mid + , right);
return cur;
}
};

最新文章

  1. 【完全开源】知乎日报UWP版(下篇):商店APP、github源码、功能说明。Windows APP 良心出品。
  2. Json.Net的简单使用
  3. iOS学习之判断是否有网络的方法
  4. Linux--02软件安装、防火墙设置
  5. 操作系统开发系列—9.Loader
  6. 51nod 1449 砝码称重(贪心算法)
  7. vim 简单配置
  8. 系统中使用frameset和Iframe刷新页面session失效
  9. Nginx+Tomcat+Terracotta的Web服务器集群实做
  10. 常用PHP运行环境一键安装包
  11. Oracle 12c最新特性
  12. ichartjs-基于html5的图表组件
  13. lua简洁的功能(两)
  14. this指向(匿名函数问题)
  15. RPC原理解析
  16. java 11 不可修改集合API
  17. javascript实现限定高度下文字随不同设备自适应改变字体大小至字数完全展示
  18. RTB业务知识之2-Impression概念和关键属性
  19. Tomcat权威指南-读书摘要系列7
  20. [原]sublime Text2

热门文章

  1. Git命令用于检查特定提交的差异
  2. java 基础 整数类型
  3. STL之partition学习
  4. CountDownLatch 闭锁、FutureTask、Semaphore信号量、Barrier栅栏
  5. elasticsearch入门笔记
  6. understand 在windows 以及 unbuntu 下的安装
  7. 20165231 2017-2018-2 《Java程序设计》第8周学习总结
  8. Java基础6-多态;匿名内部类;适配器模式
  9. 【转】PEP8 规范
  10. ubuntu server命令行搭建虚拟专用网