给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。

注意事项

There may exist multiple valid solutions, return any of them.

您在真实的面试中是否遇到过这个题?

Yes
样例

给出数组 [1,2,3,4,5,6,7], 返回

     4
/ \
2 6
/ \ / \
1 3 5 7
思路:相当于给出中序遍历的结果,然后将其转换成二叉树。
   
    直接采用中间值来作为二叉树的根节点;
    将原数组分成左右均等或者相差一个数的两个新数组;
    然后递归的对这两个新数组进行相同的处理,这样对于每一个根节点,其左右子树的高度相差绝对值不会超过1,
    也就是满足了二叉平衡树的要求了
        
    其实思路很容易想到,但在实现的时候,对于折半后,每次递归边界问题犯了糊涂,绕进去了;
    下面的代码,思路就很清晰,学习!
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param A: A sorted (increasing order) array
* @return: A tree node
*/
/* 思路:相当于给出中序遍历的结果,然后将其转换成二叉树 直接采用中间值来作为二叉树的根节点;
将原数组分成左右均等或者相差一个数的两个新数组;
然后递归的对这两个新数组进行相同的处理,这样对于每一个根节点,其左右子树的高度相差绝对值不会超过1,
也就是满足了二叉平衡树的要求了 其实思路很容易想到,但在实现的时候,对于折半后,每次递归边界问题犯了糊涂,绕进去了;
下面的代码,思路就很清晰,学习! */ TreeNode *sortedArrayToBSTCore(vector<int> &A, int start, int end){
if (start > end){
return NULL;
}
int mid = (start + end) / 2;
TreeNode *head = new TreeNode(A[mid]);//直接初始化了;
head->left = sortedArrayToBSTCore(A, start, mid - 1);
head->right = sortedArrayToBSTCore(A, mid + 1, end);
return head;
} TreeNode *sortedArrayToBST(vector<int> &A) {
// write your code here
if(A.size()==0){
return NULL;
} int start = 0;
int end = A.size() - 1;
int mid = (start + end) / 2;
TreeNode *Head = new TreeNode(A[mid]);
Head->left = sortedArrayToBSTCore(A, start, mid - 1);
Head->right = sortedArrayToBSTCore(A, mid + 1, end);
return Head;
}
};
 

Lintcode---把排序树组转换为高度最小的二叉树的更多相关文章

  1. lintcode: 把排序数组转换为高度最小的二叉搜索树

    题目: 把排序数组转换为高度最小的二叉搜索树 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 样例 给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / ...

  2. lintcode.177 把排序数组转换为高度最小的二叉搜索树

    把排序数组转换为高度最小的二叉搜索树    描述 笔记 数据 评测 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 注意事项 There may exist multiple val ...

  3. lintcode_177_把排序数组转换为高度最小的二叉搜索树

    把排序数组转换为高度最小的二叉搜索树   描述 笔记 数据 评测 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 注意事项 There may exist multiple vali ...

  4. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  5. [树组BIT]训练两题重新理解ver.

    树状数组重(jiao)新(wo)理(zuo)解(ren) POJ-2352 加加加都给我加 输入是一行一行按照x从小到大给出的,所以对于每个点,要考虑的只是x比它小的点的个数.即记录各个x的情况,并且 ...

  6. 【BZOJ-1396&2865】识别子串&字符串识别 后缀自动机/后缀树组 + 线段树

    1396: 识别子串 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 312  Solved: 193[Submit][Status][Discuss] ...

  7. CC20:高度最小的BST

    题目 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度. 解法 这道题感觉如果没有创建树的 ...

  8. jquery: json树组数据输出到表格Dom树的处理方法

    项目背景 项目中需要把表格重排显示 处理方法 思路主要是用历遍Json数组把json数据一个个append到5个表格里,还要给每个单元格绑定个单击弹出自定义对话框,表格分了单双行,第一行最后还要改ro ...

  9. 14.高度最小的BST

    题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度. 返回高度的代码如下: imp ...

随机推荐

  1. 一、 Log4E插件下载

    下载地址:http://log4e.jayefem.de/content/view/3/2/ 二.安装Log4E插件 将下载下来的压缩包解压缩,如下图所示: 解压缩生成的[de.jayefem.log ...

  2. VS 2017 取消结构参考线的显示

    Visual studio 中的结构参考线如下所示 其可以通过如下方式取消:

  3. Eclipse 相同变量背景高亮显示设置(Occurrences)

    为了你们查看设置的简便,本次书写重点用图片说明.

  4. DELPHI PROTOBUF免费的开源支持库fundamentals5

    DELPHI PROTOBUF免费的开源支持库fundamentals5 1.源码URL: https://github.com/fundamentalslib/fundamentals5 2.编译P ...

  5. javascript比较两个时间大小

    //var yourtime=document.getElementById('begin_time').value; var yourtime='2010-12-10 11:12'; yourtim ...

  6. PhD Positions opening at University of Nevada, Reno (Wireless Networking / Cognitive Radio / Wireless Security)

    PhD Positions opening at University of Nevada, RenoDept. of Computer Science and Engineering Researc ...

  7. Mac通过wifi连接 Android设备

    公司用的全是mac开发,但是全是type-C接口,每次背电脑回家啊,还得带个数据线转换器…… 想着回来,直接通过Wi-Fi连接手机就好,发现完全忘了之前套路,现在赶紧记下一波,保证包教包会! STEP ...

  8. RS中的关系引用不明确以及行列自动添加了追溯

    问题1:由于在FM模型的物理层是自己新建了查询主题,查询主题采用对已经存在的表进行sql处理然后重命名, 使用的是sql类型的数据源,sql类型设置的查询类型是默认的cognos类型,而语法是本地的结 ...

  9. IOS-UITableView入门(3)

    UITableView本身自带了(增.删)编辑功能: 1.仅仅要调用UITableView的编辑代码 就会进入编辑状态: [self.tableView setEditing:!self.tableV ...

  10. iOS子线程操作检测版本更新,有新版本通知用户更新, CheckVersion

    iOS子线程操作检测版本更新,有新版本通知用户更新 CheckVersion 一:如何使用: #import "CheckVersion.h" //输入你的app在appStore ...