您的位置:首页 > 其它

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类型比较方便

/**
* 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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: