题目描述:

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的更多相关文章

  1. [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 ...

  2. LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14

    108. 将有序数组转换为二叉搜索树 108. Convert Sorted Array to Binary Search Tree 题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. Convert Sorted Array to Binary Search Tree

    Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...

  7. 37. leetcode 108. Convert Sorted Array to Binary Search Tree

    108. Convert Sorted Array to Binary Search Tree 思路:利用一个有序数组构建一个平衡二叉排序树.直接递归构建,取中间的元素为根节点,然后分别构建左子树和右 ...

  8. 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 ...

  9. 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 ...

  10. [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 ...

随机推荐

  1. mysql use index () 优化查询的例子

    USE INDEX在你查询语句中表名的后面,添加 USE INDEX 来提供你希望 MySQ 去参考的索引列表,就可以让 MySQL 不再考虑其他可用的索引.Eg:SELECT * FROM myta ...

  2. JAVA:将反射技术应用于工厂模式(Factory)和单例模式(Singleton)的简单代码

    反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式(Factory)和单例模式(Singleton). 参考URL: http://blog.csdn.net/xiaohai79 ...

  3. Maven错误:[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?的解决方法

    错误: [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather tha ...

  4. C#带cookie模拟登录百度

    #region 同步通过POST方式发送数据 /// <summary> /// 通过POST方式发送数据 /// </summary> /// <param name= ...

  5. LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods

    我们继续解说LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union Al ...

  6. Android Studio Mac 快捷键整理分享

    代码高亮 OSX:Shift + Cmd + F7 Win/Linux:Alt + J 代码高亮向上查找 OSX:Shift + Cmd + G Win/Linux:Shift + F3 代码高亮向下 ...

  7. MySQL 时间类型字段的分析

    日期类型                存储空间               日期格式                                           日期范围---------- ...

  8. luogu1775 古代人的难题 打表找规律

    题目大意:给出一正整数k,求满足(x^2-x*y-y^2)^2=1且x,y∈[1,k]且x^2+y^2最大的正整数x,y. 既然x,y的范围给出来了,我们便有了暴力解法.因此,本题最适合打表找规律了! ...

  9. xcode打包测试

    模拟器的内存cpu网络,都是电脑的.xcode可以查看. Xcode7之前是限制人,限制电脑,限制app,限制真机调试的. Xcode7之后,做真机测试只需要apple id即可,会自动生成证书. X ...

  10. rk3288的pcba模块编译调试笔记【学习笔记】

    平台信息:内核:linux3.0.68 系统:android/android6.0平台:rk3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 摘要:最近在负责r ...