~cpp
// 트리에 관한 함수들
void init(Node** node,char* ch) // 초기화
{
(*node)->pLeft = (*node)->pRight = NULL; // 왼쪽 오른쪽 자식 NULL로
(*node)->Data = new char[strlen(ch) + 1]; // 문자열 길이만큼 할당
strcpy((*node)->Data,ch); // 노드에 문자열 복사
}
void PrintandDelete(Node* root) // 맨 왼쪽부터 순회(Preorder인가?)
{
if( root->pLeft )
Print( root->pLeft );
cout << root->Data << endl;
if( root->pRight )
Print( root->pRight );
delete root; // 할당된 노드 제거
}
int Add(Node** root,char* ch)
{
if(!(*root)) // 아무것도 없을때
{
*root = new Node; // 할당
init(root,ch); // 초기화
return 1;
}
else if(strcmp((*root)->Data,ch)>0) // 부모가 자식보다 크면 왼쪽에 추가
return add(&((*root)->pLeft),ch);
else if(strcmp((*root)->Data,ch)<0) // 부모가 자식보다 작으면 오른쪽에 추가
return add(&((*root)->pRight),ch);
else if(strcmp((*root)->Data,ch)==0) // 같으면 카운터 증가
return 1;
}