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

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

  1. 题目

    给定一个数组,将其转换为二叉搜索树。

    二叉搜索树特点:

    • 父节点元素大于左子节点元素,小于右子节点元素
    • 是一颗平衡二叉树,即每个元素的左右子树高度差的绝对值不超过1
  2. 解题思路

    1. 一个元素一个元素地插入至二叉搜索树中,每插入一个元素,二叉树需要重新调整。
    2. 使用递归,每次插入数组中间位置的元素。
  3. Code

#include <iostream>
#include <vector>
using namespace std;

struct TreeNode {
  int val;
  TreeNode* left;
  TreeNode* right;
  TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
 public:
  TreeNode* sortedArrayToBST(vector<int>& nums) {
    int len = nums.size();
    if (len == 0) {
      return NULL;
    }
    return recursion(nums, 0, len - 1);
  }
  TreeNode* recursion(vector<int>& nums, int left, int right) {
    if (left > right) {
      return nullptr;
    }
    int mid = (left + right) / 2;
    TreeNode* root = new TreeNode(nums[mid]);
    root->left = recursion(nums, left, mid - 1);
    root->right = recursion(nums, mid + 1, right);
    return root;
  }
};

int main() {
  vector<int> v = {-10, -3, 0, 5, 9};
  Solution s;
  s.sortedArrayToBST(v);
  return 0;
}
posted @ 2021-10-16 10:34  流光之中  阅读(27)  评论(0编辑  收藏  举报