/**
- Definition for a binary tree node.
- struct TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- };
/
class Solution {
public:
typedef vector::iterator pos_t;
TreeNode sortedArrayToBST(pos_t b, pos_t e)
{
int n=distance(b,e);
if(!n) return 0;
TreeNode* res=new TreeNode(0);
if (n==1)
{
res->val=b;
return res;
}
auto mid=next(b,n/2);
res->val=mid;
res->left=sortedArrayToBST(b,mid);
res->right=sortedArrayToBST(next(mid),e);
return res;
}
TreeNode sortedArrayToBST(vector& nums) {
return sortedArrayToBST(begin(nums), end(nums));
}
};
迭代器的效率要比单纯使用指针要高
TreeNode res=new TreeNode(0);
此处需要使用new,而不能使用如下代码:
TreeNode current(0);
TreeNode *test = ¤t;
的原因是,TreeNode current是局部变量,可以作值返回,不能作地址返回,其地址指向的值在析构函数(destructor)中被释放调了,所以调用指针会出错。
另外,使用new后,最好在析构函数中使用delete将空间释放掉。