소개글
제가 레폿으로 제출해서 최고점을 받은 레폿입니다.
삭제부분에서 부모노드(root)까지 모두 삭제 되는 소스입니다. 삽입, 삭제, 검색, 출력, 종료의 기능이 있습니다.
도움이 되었으면 좋겠네요.. *^^*
컴파일 실행환경
비쥬얼 c++
본문내용
/*함수 선언*/
int insert_bst(int);
void delete_bst(int, long int, long int);
int search_bst(int);
void inorder(long int);
long int p_search_bst(int);
long int c_search_bst(int);
long int max_l_search(long int, long int);
long int max_l_par_search(long int , long int);
/* 삭제 함수 */
void delete_bst(int key, long int parent, long int current)
{
struct bst tnode,nnode;
long int max_cur,max_par,child_node;
fseek(fbst,current,SEEK_SET);
fread(&cnode,sizeof(struct bst),1,fbst);
fseek(fbst,parent,SEEK_SET);
fread(&pnode,sizeof(struct bst),1,fbst);
if(parent ==0 && current ==0) { //현재 삭제할 노드가 루트 node인 경우
if(cnode.l_child==-1 && cnode.r_child==-1) { //루트 node의 l_child, r_child 둘다 없는 경우
fbst=fopen("bst.bin","wb+c");
fseek(fbst,cnode.l_child,SEEK_SET);
fread(&cnode,sizeof(struct bst),1,fbst);
fseek(fbst,current,SEEK_SET);
fwrite(&cnode,sizeof(struct bst),1,fbst);
root = -1;
}
else { //루트 node에 l_child, r_child중 하나만 있는 경우
if((cnode.l_child == -1 && cnode.r_child != -1) || (cnode.l_child != -1 && cnode.r_child == -1)) {
if(cnode.r_child == -1) { // 루트 node의 l_child만 있는 경우
child_node = cnode.l_child;
fseek(fbst,child_node,SEEK_SET);
fread(&nnode,sizeof(struct bst),1,fbst);
fseek(fbst,current,SEEK_SET);
fwrite(&nnode,sizeof(struct bst),1,fbst);
}
else { //루트 node의 r_child만 있는 경우
child_node = cnode.r_child;
fseek(fbst,child_node,SEEK_SET);
fread(&nnode,sizeof(struct bst),1,fbst);
fseek(fbst,current,SEEK_SET);
fwrite(&nnode,sizeof(struct bst),1,fbst);
}
}
else { //루트 node의 l_child, r_child 모두 있는 경우
참고 자료
없음