一. 遇到树的问题我第一个想到的就是递归.
class Solution {
public:
TreeNode* helper(int left, int right, vector<int>& nums) {
//类似二分,中点即是根节点,中点左边左子树,右边右子树.
if (left > right) return NULL;
int mid = left + (right - left) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = helper(left, mid - 1, nums);
root->right = helper(mid + 1, right, nums);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
if (nums.size() <= 0) return NULL;
return helper(0, nums.size()-1, nums);
}
};
二. 复制一下大佬的想法....
作者:windliang
链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-24/
来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
解法一 递归
1. 如果做了 98 题 和 99 题,那么又看到这里的升序数组,然后应该会想到一个点,二叉搜索树的中序遍历刚好可以输出一个升序数组。所以题目给出的升序数组就是二叉搜索树的中序遍历。
2. 根据中序遍历还原一颗树,又想到了 105 题 和 106 题,通过中序遍历加前序遍历或者中序遍历加后序遍历来还原一棵树。前序(后序)遍历的作用呢?提供根节点!然后根据根节点,就可以递归的生成左右子树。这里的话怎么知道根节点呢?平衡二叉树,既然要做到平衡,我们只要把根节点选为数组的中点即可。
3. 代码和我的差不多就不放了....