[ 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) |