2018-06-20 108. Convert Sorted Array to Binary Search Tree

题意:给你一个已排序的vector,要求吧vector转换成二叉搜索树,且该二叉搜索树是高度平衡树。
解题思路:使用递归的办法,中间的数就是根节点,左边的一半组成左子树,右边的一半组成右子树,然后对左半vector和右半vector分别做相同的操作,直到vector为空。
时间复杂度:O(N)
空间复杂度:O(N)

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {   
        if(nums.size() == 0)
            return NULL;
        TreeNode* node = new TreeNode(nums[nums.size() / 2]);
        vector<int> leftvec(nums.begin(), nums.begin() + nums.size()/2);
        vector<int> rightvec(nums.begin()+nums.size()/2 + 1, nums.end());
        node->left = sortedArrayToBST(leftvec);
        node->right = sortedArrayToBST(rightvec);
        return node;
    }
};

需要注意的是:
在创造节点的时候需要使用堆内存,new一个TreeNode变量,如果使用动态内存的化,当递归调用底层函数return后,内存将被收回,结果无法预知。
但是如果使用new申请堆内存,仅在程序员释放的时候才会回收内存,且val、left、right都存放在new申请的TreeNode变量堆内存中,函数return后也不会失效。

    原文作者:alexssssu
    原文地址: https://www.jianshu.com/p/41e374b4e9cb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞