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

注意事项

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. Spring通过Gmail SMTP服务器MailSender发送电子邮件

    Spring提供了一个有用的“org.springframework.mail.javamail.JavaMailSenderImpl”类,通过JavaMail API 简化邮件发送过程.这里有一个项 ...

  2. Install Linux Kernel 4.10 In CentOS and Ubuntu

    https://www.ostechnix.com/install-linux-kernel-4-10-centos-ubuntu/

  3. Apache下error.log文件太大的处理

    偶尔发现Apache下的错误日志非常的大,有4G多,先停止Apache服务的所有进程,最简单就是输命令:net stop apache2.2,然后删除 Apache2/logs/目录下的 error. ...

  4. @MySQL中length字符长度函数使用方法

    MySQL里面的length函数是一个用来获取字符串长度的内置函数,一个汉字是算三个字符,中文的标点符号也是算三个字符,一个数字或字母算一个字符.具体用法示例如下: 1.查看某字符串的长度 SELEC ...

  5. 第六章 consul UI

    1.建立三个consul节点(一个server+两个client) 具体的过程见http://www.cnblogs.com/java-zhao/p/5375132.html 1)在终端下启动vagr ...

  6. sql表值参数

    using System;using System.Collections;using System.Collections.Specialized;using System.Data;using S ...

  7. MIME简介

    MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器 ...

  8. Thinkphp错误-phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因有可能是因为修改了m ...

  9. 04-树4. Root of AVL Tree (25)

    04-树4. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  10. linux free命令详解和使用实例(查看内存使用率)

    转载:http://www.jb51.net/LINUXjishu/152017.html 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和空闲的内存情况,包括物理内存 ...