/*
 * 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 |