Leetcode-108 将有序数组转换为二叉搜索树
Leetcode-108 将有序数组转换为二叉搜索树
-
题目
给定一个数组,将其转换为二叉搜索树。
二叉搜索树特点:
- 父节点元素大于左子节点元素,小于右子节点元素
- 是一颗平衡二叉树,即每个元素的左右子树高度差的绝对值不超过1
-
解题思路
- 一个元素一个元素地插入至二叉搜索树中,每插入一个元素,二叉树需要重新调整。
- 使用递归,每次插入数组中间位置的元素。
-
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;
}