CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): justice (박창섭)
날 짜 (Date): 1994년04월10일(일) 23시29분56초 KST
제 목(Title): [re]C++에서 binary tree...



글쎄요... 

C++에서 class는 real world내의 object를 표현하는 수단입니다. 하지만 
표현하고자 하는 object의 구조, 즉 data structure를 정의할 뿐만 아니라 그 
object와 관련된 operation들을 포함시킴으로써 object를 manipulate하고 
access하는 수단(method)을 data structure와 밀접하게 관련시키는데 중요한 
의의가 있을 겁니다. 이런걸 흔히 encapsulation이라고 한다는 것은 뭐 잘 
아실테지만, 아무튼 이런 특징이 class와 sturct를 구별되게 하는 요인일 
것입니다. 

그런데 만일 binary search tree를 그렇게 정의한다면 private 변수들이 
나타내는  것은 tree내의 한 node의 structure가 될 것입니다. 또한 이런 data 
structure에 대해서 dictionary operation들을 encapsulation하는 것도 적절하지 
않다고 생각됩니다. 제 생각에는 binary search tree의 class는 그것의 instance가 
하나의 tree전체가 되도록 정의하는 것이 합리적(?)인 것 같습니다. 즉, 이 class가 
가지고 있는 data는 만들어질 tree의 root이고 tree를 이룰 각 node는 따로 
structure를 정의해서 이용하는 것이 어떨까합니다. 

뭐 이렇게 할 수도 있겠지요...

--------------------------------------------------------
typedef struct _node {
    int key;
    INFO* info;
    struct _node* leftC, *rightC;
} node;

class binSearchTree {
private:
    node* root;
    node* makeANode(int key, INFO* info);

public:
    binSearchTree();
    binSearchTree(int key, INFO* info);
    ~binSearchTree();
    INFO* lookUp(int key);
    void insert(int key, INFO* info);
    void delete(int key);
    ...
};

node* binSearchTree::makeANode(int key, INFO* info)
{
    nptr = (node*)malloc(sizeof(node));
    nptr->key = key; nptr->info = INFO;
    nptr->leftC = nptr->rightC = NULL;
    return nptr;
}

binSearchTree::binSearchTree(void) 
{
    root = NULL;
}

binSearchTree::binSearchTree(int key, INFO* info)
{
    root = makeANODE(key, info);
}

INFO* binSearchTree::lookUp(int key)
{
    node* nptr = root;
    while (nptr) {
        if (key == nptr->key) return (nptr->INFO);
        else if (key < npr->key)
            nptr = nptr->left;
        else
            nptr = nptr->right;
    }
    return NULL;
}


생각나는대로 대충 한번 짜봤는데요... 문법은 맞는지 모르겠네요.. C++해본지도 꽤 
오래되서...

조금이라도 도움이 되셨기를 바랍니다. 그럼...

-----------------------------------------------------------
    KAIST CS under 박창섭 (cspark@abel.kaist.ac.kr)
 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.