/*
* http://sosal.tistory.com/
* made by so_Sal
*/
루트 노드를 50으로 넣은 후, rand()%100 으로 노드를 계속해서 생성해나갑니다.
생성된 노드보다 큰값이면 우, 작으면 좌측 노드로 향하며
우측, 또는 좌측노드가 NULL이라면 새로 생성된 노드는
자식노드가 되며, NULL이 아닐 경우에는, 다시 크기 비교를 반복합니다.
#include<iostream>
#include<time.h>
using namespace std;
class node{
private:
int value;
public:
node(int val){
value=val;
}
int getValue(){
return value;
}
node* left;
node* right;
~node(){
delete this;
}
};
node* CreateNode(int value); // 노드생성함수
void InsertNode(node* tree,node* newNode);
void DeleteNode(node* delNode); // 노드삭제함수
void DestroyTree(node* root); // 트리 삭제함수
void PrintTree(node* Node); // 노드 출력함수 (전위식)
int main(){
srand(time(0));
node* root = CreateNode(50); // root 노드를 생성한 후
node* newNode;
for(int i=0;i<100;i++){
newNode = CreateNode(rand()%100);
InsertNode(root,newNode);
}
PrintTree(root);
return 0;
}
node* CreateNode(char value){
node* newNode = new node(value); // 생성 후
newNode->left = NULL; // 각 value 초기화
newNode->right = NULL;
return newNode;
}
void InsertNode(node* tree,node* newNode){
if(tree->getValue() < newNode->getValue()){
if(tree->right == NULL) //현재 노드보다 newNode가 큰값이면 우, 작으면 좌
tree->right = newNode; //<--우 또는 좌가 비어있으면 바로 자식노드로!
else
InsertNode(tree->right,newNode); //아니면 다시 비교
}
else if(tree->getValue() > newNode->getValue()){
if(tree->left == NULL)
tree->left = newNode; //위 if절과 방향만 반대
else
InsertNode(tree->left,newNode);
}
return;
}
void PrintTree(node* Node){
if(Node == NULL)
return;
PrintTree(Node->left);
cout<<Node->getValue()<<endl; // 중위식 출력
PrintTree(Node->right); // 재귀
return;
}
void DeleteNode(node* delNode){
delete delNode;
return;
}
void DestroyTree(node* root){
DestroyTree(root->left);
DestroyTree(root->right);
DeleteNode(root);
return;
}
'Programing > C- programing' 카테고리의 다른 글
Hash function - 나눗셈법 (0) | 2010.09.01 |
---|---|
이진 탐색트리 삭제 포함 소스 (0) | 2010.08.23 |
bsearch() 이진탐색 표준 라이브러리 (0) | 2010.08.23 |
탐색 : 이진탐색 (0) | 2010.08.23 |
링크드리스트 :: 추가,삭제,출력,찾기,값변경,위치변경,종료 (0) | 2010.08.22 |