문제
https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/
걸린 시간
- 실패
풀이
C++
/**
* Definition for a binary tree node.
* 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) {
return makeBST(nums, 0, nums.size()-1);
}
TreeNode* makeBST(vector<int>& nums, int start, int end){
// 기저 사례
if(start > end) return nullptr;
// 재귀 호출
int mid = (start+end)/2;
TreeNode* root = new TreeNode(nums[mid], makeBST(nums, start, mid-1), makeBST(nums, mid+1, end));
return root;
}
};
오름차순으로 정렬되어 있는 원소들을 균형잡힌 이진 탐색 트리 형태로 바꾸는 문제이다.
AVL 트리를 떠올리며 어렵게 생각했지만, 정답을 보니 원소가 오름차순으로 정렬되어 있다는 점을 이용하면 재귀 구조만을 이용해 쉽게 만들 수 있었다.
잊었던 포인터 개념들
- 트리 구조를 유지하기 위해서는 데이터를 힙 공간에 저장하여야 한다.
- 지역변수로 선언할 경우 함수가 종료될 때 스택에 있는 데이터가 소멸된다.
- c++ 에서 동적할당을 하기 위한 방법 : [포인터형 데이터 타입] [변수명] = new [데이터 타입];
'LeetCode' 카테고리의 다른 글
LeetCode 56. Merge Intervals (0) | 2021.02.24 |
---|---|
LeetCode 208. Implement Trie (Prefix Tree) (0) | 2021.02.21 |
LeetCode 297. Serialize and Deserialize Binary Tree (0) | 2021.02.08 |
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (0) | 2021.02.07 |
LeetCode 1038. Binary Search Tree to Greater Sum Tree (0) | 2021.02.06 |
댓글