题解 | #将升序数组转化为平衡二叉搜索树#

将升序数组转化为平衡二叉搜索树

http://www.nowcoder.com/practice/7e5b00f94b254da599a9472fe5ab283d

首先理解一下平衡二叉搜索树(BST),看题中给的例子:
输入:[-1,0,1,2]
输出:
{1,0,2,-1}
也就是
图片说明
图比较丑,根节点取值为1,最后一层节点是-1。

然后,结合题目,需要根据输入来构建输出,那关键点就是确定根节点,因为得到根节点后,序列就分为
【左子树 跟节点 右子树】了,然后递归调用就搞定了。

给定一个区间[start,end],根节点的下标如何确定呢?找找规律,可以发现 根节点下标就是index = (start+end+1)/2,为的是把填不满的叶子节点最终放置到左子树中。

好了,下面可以写代码了

class Solution {
public:
    /**
     * 
     * @param num int整型vector 
     * @return TreeNode类
     */
    TreeNode* sortedArrayToBST(vector<int>&num, int start, int end){
        if(start>end)
            return NULL;
        int mid = (start + end+1)/2;
        TreeNode* root = new TreeNode(num[mid]);
        root->left = sortedArrayToBST(num, start, mid -1);
        root->right = sortedArrayToBST(num, mid+1, end);
        return root;


    }
    TreeNode* sortedArrayToBST(vector<int>& num) {
        // write code here
        return sortedArrayToBST(num,0,num.size()-1);
    }
};
全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
10-17 17:14
门头沟学院 C++
牛客410039819号:北京地区大多是919和927,这两场挂太多人了
投递华为等公司10个岗位
点赞 评论 收藏
分享
面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务