이번 글은 이진 검색 트리(BST, Binary Search Tree)의 삽입에 대한 글입니다.
#include<iostream>
#include<stdlib.h>
using namespace std;
int count=0; // treeInsert 함수의 호출 횟수를 기억하기 위한 변수
template <typename T>
class cBinarySearchTree;
template <typename T>
class cNode {
friend class cBinarySearchTree <T>;
public:
cNode();
cNode(T t) { key = t; left = right = 0; }
private:
cNode<T>* left;
cNode<T>* right;
T key;
};
template <typename T>
class cBinarySearchTree {
friend class cNode<T>;
public:
cBinarySearchTree();
~cBinarySearchTree();
void treeInsert(T x);
private:
cNode<T>* treeInsert(cNode<T>* t, T x);
cNode<T>* root;
};
template <typename T>
cBinarySearchTree <T>::cBinarySearchTree() {
root = NULL;
}
template <typename T>
cBinarySearchTree <T>::~cBinarySearchTree() {
}
template <typename T>
void cBinarySearchTree <T>::treeInsert(T x) {
root = treeInsert(root, x);
return;
}
template <typename T>
cNode<T>* cBinarySearchTree <T>::treeInsert(cNode <T>* t, T x) {
if (t == NULL) {
cNode<T> *r = new cNode<T>(x);
return r;
}
if (x < t->key) {
t->left = treeInsert(t->left, x);
count++;
return t;
}
else {
t->right = treeInsert(t->right, x);
count++;
return t;
}
}
int main() {
int n;
int x;
cBinarySearchTree<int> tree;
cin >> n;
for (int i = 0; i<n; i++) {
cin >> x;
tree.treeInsert(x);
count++;
}
cout << count;
return 0;
}
'알고리즘 > 알고리즘 학습' 카테고리의 다른 글
2019 CNUPC 전북대학교 프로그래밍 대회 문제 - 키보드 이벤트(C++) (0) | 2019.05.23 |
---|---|
2019 CNUPC 전북대학교 프로그래밍 대회 문제 - 태보태보 총난타(C++) (0) | 2019.05.22 |
2019 CNUPC 전북대학교 프로그래밍 대회 문제 - 물리 공부(C++) (0) | 2019.05.21 |
[C/C++ 알고리즘] 문자열을 입력받아 역으로 출력하기(Reverse) (0) | 2019.05.09 |
C언어 알고리즘 최대공약수 구하기(유클리드 알고리즘) (0) | 2019.03.05 |
C언어 알고리즘 switch 문 기초(1) (0) | 2019.03.05 |
C언어 알고리즘 임의의 숫자 찾기 (0) | 2019.03.05 |
C언어 알고리즘 배열을 입력 받아 가장 큰 수 최댓값 찾기 (0) | 2019.03.05 |
최근댓글