본문내용
change_node->llink); // 대체할 노드 탐색 함수 호출
change_node -> item = temp -> item; // 삭제 할 노드에 대체할 데이타 저장
del_tree(temp); //트리 구조를 위한 재연결 함수 호출
}
}
// 왼쪽 서브트리 탐색 후 가장 큰 데이타 호출 함수
node_pointer max_search(node_pointer node)
{
while(node) {
if(node->rlink == NULL) return node; // 오른쪽 링크에 NULL이면 없으면 그 노드가 가장 큰 노드
return max_search(node -> rlink); // 오른쪽 링크에 NULL이 아니면 큰 값을 찾아 재귀함수로써 오른쪽 검색
}
return NULL; // 노드가 NULL일때 NULL리턴
}
// 트리구조를 위한 재연결 함수
void del_tree(node_pointer del_node)
{
node_pointer temp; // 대체 된 노드 자리에 연결하기 위함
if(del_node->llink){
temp = max_search(del_node->llink); // 연결 노드 탐색 함수 호출
del_node -> item = temp -> item; // 연결 노드의 데이타를 대체한 노드로 복사
if(temp->llink == NULL){ // 연결 노드가 가장 크고 단말노드일때
del_node ->llink = NULL; // 연결 노드는 위에서 이전이 완료 됐으므로 연결 끊음
}
del_tree(temp); //연결 노드를 찾기위한 재귀
}
}
change_node -> item = temp -> item; // 삭제 할 노드에 대체할 데이타 저장
del_tree(temp); //트리 구조를 위한 재연결 함수 호출
}
}
// 왼쪽 서브트리 탐색 후 가장 큰 데이타 호출 함수
node_pointer max_search(node_pointer node)
{
while(node) {
if(node->rlink == NULL) return node; // 오른쪽 링크에 NULL이면 없으면 그 노드가 가장 큰 노드
return max_search(node -> rlink); // 오른쪽 링크에 NULL이 아니면 큰 값을 찾아 재귀함수로써 오른쪽 검색
}
return NULL; // 노드가 NULL일때 NULL리턴
}
// 트리구조를 위한 재연결 함수
void del_tree(node_pointer del_node)
{
node_pointer temp; // 대체 된 노드 자리에 연결하기 위함
if(del_node->llink){
temp = max_search(del_node->llink); // 연결 노드 탐색 함수 호출
del_node -> item = temp -> item; // 연결 노드의 데이타를 대체한 노드로 복사
if(temp->llink == NULL){ // 연결 노드가 가장 크고 단말노드일때
del_node ->llink = NULL; // 연결 노드는 위에서 이전이 완료 됐으므로 연결 끊음
}
del_tree(temp); //연결 노드를 찾기위한 재귀
}
}
소개글