🧩Algo 二叉树

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

难度:🟢 Easy | 标签:树、BST、递归 | 状态:⬜ LeetCode 链接

思路

每次选中点作为根,左右子区间递归构造。 中点选 (l + r) / 2 即可保证高度平衡。

代码

class Solution {
    TreeNode* build(vector<int>& a, int l, int r) {
        if (l > r) return nullptr;
        int m = l + (r - l) / 2;
        auto* root = new TreeNode(a[m]);
        root->left  = build(a, l, m - 1);
        root->right = build(a, m + 1, r);
        return root;
    }
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return build(nums, 0, nums.size() - 1);
    }
};

复杂度

  • 时间 O(n),空间 O(log n)

易错 / 回顾

  • 区间闭闭,base case l > r
  • 选中点保证平衡——不平衡也能得 BST,但题目要求平衡
  • 偶数长度选左中或右中都行
Related · 二叉树