说明:
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
思路:树、链表等数据结构的算法一般情况下需要使用递归的方法,而递归的构造需要注意构造递归停止条件,递归返回值,递归输入。这三点想明白后一般就OK了。
今天上午的心情有点不稳定,因为在做题的时候,过来一个人,轻松地说,leetcode上面的这些题目一般写过代码的人都可以轻松做出来,而我正好写这个遇到指针返回的bug,听了这番言论后,心理五味杂陈,这是一种什么感觉呢?就是欧美火箭都上天了,你还在这里钻木取火的感觉,气得我效率直线下降。
真正验证了一句话:十行代码写了一上午。可见思路清晰、严谨的重要性。人越长大,注意力越难以集中,注意力不集中,效率真是低下。
/**
* 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:
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* root = NULL;
if(nums.size()<1) {
return root;
}
int medium = nums.size()/2;
root = new TreeNode(nums[medium]);
vector<int> vec_left(nums.begin(), nums.begin()+medium);
vector<int> vec_right(nums.begin()+medium+1, nums.end());
root->left = sortedArrayToBST(vec_left);
root->right = sortedArrayToBST(vec_right);
return root;
}
};