/*
* http://sosal.tistory.com/
* made by so_Sal
*/
트리도 딱히 어렵진 않습니다.
다만 링크드리스트 (연결리스트)의 구조가
복잡하게 연결되어있을 뿐 입니다.
우리의 디렉토리 풀더나, 회사 구조도 등이 트리로 구성되어있습니다.
주석을 찬찬히 살펴보면서 소스를 보시면 금방 이해하실 수 있을거라 생각합니다 ㅎㅎ.
#include<iostream>
#include<cstring>
using namespace std;
class node{
private:
char value[20];
public:
node(char* name){
strncpy(value,name,19);
} // 생성자 함수를 이용해 빠르게 value 정의
char* getValue(){
return value;
} // value를 리턴하는 함수
node* left;
node* right;
};
node* CreateNode(char *value){
node* newNode = new node(value);
newNode->left = NULL;
newNode->right = NULL;
return newNode;
} // 단순히 노드를 생성하여 리턴하는 함수
void DeleteNode(node* delNode){
delete delNode;
} // 생성된 노드를 삭제하는 함수
void linkNode(node* Parent,node* child){
if(Parent->left == NULL){
Parent->left = child;
}
else if(Parent->right == NULL){
Parent->right = child;
}
else{
cout<<"자식을 할당할 수 없습니다."<<endl;
}
} // 왼쪽이든 오른쪽이든 빈공간이 있다면 부모로 연결시키는 함수
void PrintNode(node* Node,int depth){
for(int i=0;i<depth*4;i++)
cout<<" ";
cout<<Node->getValue()<<endl;
if(Node->left != NULL)
PrintNode(Node->left,depth+1);
if(Node->right != NULL)
PrintNode(Node->right,depth+1);
} // 재귀 방식으로, 모든 child를 출력하는 함수
void DestroyTree(node* parent){
if(parent->left != NULL)
DestroyTree(parent->left);
if(parent->right != NULL)
DestroyTree(parent->right);
DeleteNode(parent);
}
int main(){
node* root = CreateNode("root");
node* A = CreateNode("document");
node* B = CreateNode("program");
linkNode(root,A);
linkNode(root,B);
node* C = CreateNode("my picture");
node* D = CreateNode("my Music");
linkNode(A,C);
linkNode(A,D);
node* E = CreateNode("VS2005");
node* F = CreateNode("nate_on");
linkNode(B,E);
linkNode(B,F);
node* G = CreateNode("sosal.jpg");
node* H = CreateNode("monni.mp3");
node* I = CreateNode("stigmatized.mp3");
linkNode(C,G);
linkNode(D,H);
linkNode(D,I);
PrintNode(root,0);
DestroyTree(root);
return 0;
}
음; 짜다보니.. 뇌자알 트리 소스와 거의 유사하게 되었네요.
뇌자알로 공부하다보니. ㄷㄷ
'Programing > C- programing' 카테고리의 다른 글
정렬 - bubble sort. 거품정렬 (6) | 2010.08.22 |
---|---|
트리 : level에 따른 이진트리 자동 생성 소스 (0) | 2010.08.20 |
큐 : 링크드 리스트로 구현한 간단한 큐 (0) | 2010.08.19 |
스택 : 링크드 리스트로 구현한 간단한 스택. pop, push (0) | 2010.08.19 |
스택 :: 가장 기본적인 형태. 배열 (0) | 2010.08.19 |