feat: 108_conver_sorted_array_to_binary_search_tree
This commit is contained in:
parent
4f2d4f58de
commit
c00076fa29
41
108_convert_sorted_array_to_binary_search_tree/main.cpp
Normal file
41
108_convert_sorted_array_to_binary_search_tree/main.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
struct TreeNode {
|
||||
int val;
|
||||
TreeNode *left;
|
||||
TreeNode *right;
|
||||
TreeNode() : val(0), left(nullptr), right(nullptr) {}
|
||||
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
|
||||
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
|
||||
};
|
||||
|
||||
class Solution {
|
||||
public:
|
||||
TreeNode *sortedArrayToBST(vector<int> &nums) {
|
||||
TreeNode *root = new TreeNode();
|
||||
appendArrayToNode(nums, root);
|
||||
return root;
|
||||
}
|
||||
|
||||
void appendArrayToNode(vector<int> &nums, TreeNode *root) {
|
||||
int mid = nums.size() / 2;
|
||||
root->val = nums[mid];
|
||||
|
||||
if (nums.size() == 1) return;
|
||||
|
||||
vector<int> leftNums, rightNums;
|
||||
copy(nums.begin(), nums.begin() + mid, back_inserter(leftNums));
|
||||
copy(nums.begin() + mid + 1, nums.end(), back_inserter(rightNums));
|
||||
|
||||
if (!leftNums.empty()) {
|
||||
root->left = new TreeNode();
|
||||
appendArrayToNode(leftNums, root->left);
|
||||
}
|
||||
|
||||
if (!rightNums.empty()) {
|
||||
root->right = new TreeNode();
|
||||
appendArrayToNode(rightNums, root->right);
|
||||
}
|
||||
}
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user