Convert Sorted Array to Binary Search Tree
2015-11-27 14:44
309 查看
题目:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
把有序数组转化为二叉搜索树
解析:
不会做,看了答案感觉思想很简单,就是将数组中中间的数字当成跟,左子树为(first,mid)右子树为(mid+1,last)
答案中似乎对所给出的模版函数的参数不满,重新在类中加载了函数
auto的用法也是亮点,auto一般认为有两个作用:
一是用来声明自动变量。它是存储类型标识符,表明变量(自动)具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。(不需要明确指定auto关键字)
二是使用auto来代替变量的类型,前提是被明确类型的初始化变量初始化的,可以使用auto关键字比如int i=10; auto a = i; //这样a也是int类型了这在使用一些模板类的时候,对于减少冗赘的代码也很有用
本例中的mid因为使用了模版类,所以用auto类型比较方便
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
把有序数组转化为二叉搜索树
解析:
不会做,看了答案感觉思想很简单,就是将数组中中间的数字当成跟,左子树为(first,mid)右子树为(mid+1,last)
答案中似乎对所给出的模版函数的参数不满,重新在类中加载了函数
auto的用法也是亮点,auto一般认为有两个作用:
一是用来声明自动变量。它是存储类型标识符,表明变量(自动)具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。(不需要明确指定auto关键字)
二是使用auto来代替变量的类型,前提是被明确类型的初始化变量初始化的,可以使用auto关键字比如int i=10; auto a = i; //这样a也是int类型了这在使用一些模板类的时候,对于减少冗赘的代码也很有用
本例中的mid因为使用了模版类,所以用auto类型比较方便
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ //时间复杂度 O(n),空间复杂度 O(logn) class Solution { public: TreeNode* sortedArrayToBST (vector<int>& num) { return sortedArrayToBST(num.begin(), num.end()); } template<typename RandomAccessIterator> TreeNode* sortedArrayToBST (RandomAccessIterator first, RandomAccessIterator last) { const auto length = distance(first, last); if (length <= 0) return nullptr; // 终止条件 // 三方合并 auto mid = first + length / 2; TreeNode* root = new TreeNode (*mid); root->left = sortedArrayToBST(first, mid); root->right = sortedArrayToBST(mid + 1, last); return root; } };
相关文章推荐
- 数据库理论
- Web服务器缓存
- servlet 生命周期 init destroy 调用
- 关于发送H264 sdp里的
- 谈谈如何将stdio的文件导入到eclipse里面
- rand()函数及其改造 http://blog.csdn.net/sjd163/article/details/5337446
- Ganglia集群监控
- Android WebView高度显示错乱的问题
- 残阳掠影
- angular中动态添加的元素绑定事件问题
- 浮动问题
- s标签可以if elseif else
- Android的Handler用法
- MySQL学习4-MySQL基本语句
- Linux命令之mount挂载盘符
- IQueryable 和 IEnumerable
- Vitamio中文API文档—— VideoView
- android 如何预置APK
- NavigationBar的使用及创建
- ArrayList和LinkedList区别