Skip to content

Commit 816f322

Browse files
committed
Solved problem 108 : Convert Sorted Array To BST
1 parent 05b68a9 commit 816f322

File tree

2 files changed

+55
-3
lines changed

2 files changed

+55
-3
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Problem: 108
3+
* Name: Convert Sorted Array To BST
4+
* Difficulty: Easy
5+
* Topic: Binary Trees
6+
* Link: https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
7+
*/
8+
9+
#include <bits/stdc++.h>
10+
using namespace std;
11+
12+
// Tree Node Implementation
13+
struct TreeNode {
14+
int val;
15+
TreeNode *left;
16+
TreeNode *right;
17+
TreeNode() : val(0), left(nullptr), right(nullptr) {}
18+
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
19+
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
20+
};
21+
22+
// Using only one function
23+
// Time Complexity: O(n)
24+
// Space Complexity: O(n)
25+
TreeNode* sortedArrayToBSTOne(vector<int>& nums) {
26+
if (nums.size() == 0) { return nullptr;}
27+
if (nums.size() == 1) { return new TreeNode(nums[0]);}
28+
int middleIdx = nums.size() / 2;
29+
TreeNode *root = new TreeNode(nums[middleIdx]);
30+
vector<int> leftNums = {nums.begin(), nums.begin() + middleIdx};
31+
vector<int> rightNums = {nums.begin() + middleIdx + 1, nums.end()};
32+
root->left = sortedArrayToBSTOne(leftNums);
33+
root->right = sortedArrayToBSTOne(rightNums);
34+
return root;
35+
}
36+
37+
// Using an helper function
38+
// Time Complexity: O(n)
39+
// Space Complexity: O(n)
40+
// This solution uses less memory because it doesn't create the subvectors
41+
TreeNode* sortedArrayToBSTHelper(vector<int>& nums, int left, int right);
42+
TreeNode* sortedArrayToBSTTwo(vector<int>& nums) {
43+
return sortedArrayToBSTHelper(nums, 0, nums.size()-1);
44+
}
45+
TreeNode* sortedArrayToBSTHelper(vector<int>& nums, int left, int right) {
46+
if (left > right) { return nullptr;}
47+
int middleIdx = left + (right - left) / 2;
48+
TreeNode *root = new TreeNode(nums[middleIdx]);
49+
root->left = sortedArrayToBSTHelper(nums, left, middleIdx-1);
50+
root->right = sortedArrayToBSTHelper(nums, middleIdx+1, right);
51+
return root;
52+
}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
### Problems Solved
1818

19-
| Total | 37 |
19+
| Total | 38 |
2020
|:---:|:---:|
2121

2222
#### Search By Topic
@@ -26,7 +26,7 @@
2626
| Arrays & Hashing | 7 |
2727
| Backtracking | 0 |
2828
| Binary Search | 2 |
29-
| Binary Trees | 7 |
29+
| Binary Trees | 8 |
3030
| Bit Manipulation | 5 |
3131
| Dynamic Programming 1D | 1 |
3232
| Dynamic Programming 2D | 0 |
@@ -46,7 +46,7 @@
4646

4747
| Difficulty | Number |
4848
|:---|---:|
49-
| Easy | 36 |
49+
| Easy | 37 |
5050
| Medium | 1 |
5151
| Hard | 0 |
5252

0 commit comments

Comments
 (0)