Q : 오름차순으로 정렬된 배열이 있다. 이 배열 안에 들어 있는 원소는 정수이며 중복된 값이 없다고 했을 때 높이가 최소가 되는 이진 탐색 트리를 만드는 알고리즘을 작성하라.
...더보기
template <class T>
class TreeNode{
public:
T data;
TreeNode* parent;
TreeNode* left;
TreeNode* right;
TreeNode(T data) {
this->data = data;
}
};
template <class T>
class ListNode {
T data;
ListNode* previous;
ListNode* next;
ListNode(T data) {
this->data = data;
}
};
#include <iostream>
#include "Node.h"
TreeNode<int>* MinimumTree(int* sortedArray, int start, int end) {
if (start > end) return NULL;
int center = (start + end + 1) / 2;
printf("%d Start : %d, End : %d\n", sortedArray[center], start, end);
TreeNode<int>* node = new TreeNode<int>(sortedArray[center]);
node->left = MinimumTree(sortedArray, start, center - 1);
node->right = MinimumTree(sortedArray, center + 1, end);
return node;
}
TreeNode<int>* MinimumTree(int* sortedArray, int length) {
return MinimumTree(sortedArray, 0, length - 1);
}
void printTree(TreeNode<int>* tree) {
printf("%d : ", tree->data);
if(tree->left!=NULL)
printf("L %d ", tree->left->data);
if (tree->right != NULL)
printf("R %d", tree->right->data);
printf("\n");
if (tree->left != NULL)
printTree(tree->left);
if (tree->right != NULL)
printTree(tree->right);
}
int main() {
int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < 10; i++) {
printf("%d ", array[i]);
}
printf("\n");
printTree(MinimumTree(array, 10));
printf("\n");
}
중앙에 있는 원소를 가운데에 두고 왼쪽에 있는 원소는 왼쪽 트리에, 오른쪽에 있는 원소는 오른쪽 트리에 삽입한다.
재귀 호출을 통해 반복한다.
'문제 풀기 > 코딩인터뷰' 카테고리의 다른 글
[코딩인터뷰 완전정복] 4.4 균형 확인 (0) | 2019.05.29 |
---|---|
[코딩인터뷰 완전정복] 4.3 깊이의 리스트 (0) | 2019.05.23 |
[코딩인터뷰 완전정복] 4.1 노드 사이의 경로 (0) | 2019.05.15 |
[코딩인터뷰 완전정복] 3.6 동물 보호소 (0) | 2019.05.15 |
[코딩인터뷰 완전정복] 3.5 스택 정렬 (0) | 2019.05.15 |