LeetCode 108. 将有序数组转换为二叉搜索树

题目

题目链接
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树,答案不是唯一的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

分治的思想。我记得以前刷陈越姥姥的数据结构课后习题的时候碰到过类似的问题,就是从树的最左边然后采取中序遍历的顺序依次插入数组,不过这个好像是反序,比较经典的一个题目。

TreeNode *sortedArrayToBST(vector<int> &nums)
{
    /* 3月25日 */
    return sortedArrayToBST(nums, 0, nums.size() - 1);
}
TreeNode *sortedArrayToBST(vector<int> &nums, int l, int r)
{
    if (l == r)
    {
        return new TreeNode(nums[l]);
    }
    else if (l < r)
    {
        int mid = l + (r - l + 1) / 2;
        TreeNode *root = new TreeNode(nums[mid]);
        root->left = sortedArrayToBST(nums, l, mid - 1);
        root->right = sortedArrayToBST(nums, mid + 1, r);
        return root;
    }
    else
    {
        return nullptr;
    }
}
发布了134 篇原创文章 · 获赞 61 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览