급합니다!!!!이진트리 삭제문제요
해대기
질문 제목 :
질문 내용 :
노드삭제에서 다른건 다 되는데 루트노드를 지우고 출력하면 프로그램이 안됩니다
뭐가 원인인지 좀 찾아주세요.. 급합니다 ㅠㅠ
int Delete(struct stu** tree, int number){
struct stu* parent=NULL, *p=NULL, *c_parent=NULL, *c_p=NULL, *temp=NULL;
parent = *tree;
if(parent == NULL){
printf(찾으시는 학번의 학생은 없습니다.\n);
return 0;
}
p = parent;
while(1){
if(number p-number){
parent = p;
p = p-right;
}
else if(number p-number){
parent = p;
p = p-left;
}
else
break;
}
if((p-left)&&(p-right)){
c_parent = p-right;
if(c_parent-left != NULL){
c_p = c_parent-left;
while(c_p-left != NULL){
c_parent = c_p;
c_p = c_p-left;
}
if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
c_parent-left = NULL;
}
else{
parent-left = c_p;
c_parent-left = NULL;
}
}
else if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
c_parent-left = NULL;
}
else{
parent-right = c_p;
c_parent-left = NULL;
}
}
c_p-left = p-left;
if(c_p-right !=NULL){
c_parent = c_p-right;
temp = c_parent;
while(temp-right !=NULL){
c_parent = temp;
temp = temp-right;
}
temp-right = p-right;
}
else{
c_p-right = p-right;
}
}
else{
c_p = c_parent;
if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
}
else{
parent-left = c_p;
}
}
else if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
}
else{
parent-right = c_p;
}
}
c_p-left = p-left;
}
}
else if(!(p-left)&&!(p-right)){
if(parent-number number){
parent-left = NULL;
}
else if(parent-number number){
parent-right = NULL;
}
}
else if((p-left)||(p-right)){
if((p-left)&&!(p-right)){
c_parent = p-left;
if(c_parent-right != NULL){
c_p = c_parent-right;
while(c_p-right != NULL){
c_parent = c_p;
c_p = c_p-right;
}
if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
c_parent-right = NULL;
}
else{
parent-left = c_p;
c_parent-right = NULL;
}
}
else if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
c_parent-right = NULL;
}
else{
parent-right = c_p;
c_parent-right = NULL;
}
}
if(c_p-left !=NULL){
c_parent = c_p-left;
temp = c_parent;
while(temp-left !=NULL){
c_parent = temp;
temp = temp-left;
}
temp-left = p-left;
}
else{
c_p-left = p-left;
}
}
else{
c_p = c_parent;
if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
&;
}
else{
parent-left = c_p;
}
}
else if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
}
else{
parent-right = c_p;
}
}
c_p-right = NULL;
}
}
else{
c_parent = p-right;
if(c_parent-left != NULL){
c_p = c_parent-left;
while(c_p-left !=NULL){
c_parent = c_p;
c_p = c_p-left;
}
if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
c_parent-left = NULL;
}
else{
parent-left = c_p;
c_parent-left = NULL;
}
}
else if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
c_parent-left = NULL;
}
else{
parent-right = c_p;
c_parent-left = NULL;
}
}
if(c_p-right !=NULL){
c_parent = c_p-right;
temp = c_parent;
while(temp-right != NULL){
c_parent = temp;
temp = temp-right;
}
temp-right = p-right;
}
else{
c_p-right = p-right;
}
}
else{
c_p = c_parent;
if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
}
else{
parent-left = c_p;
}
}
else if(parent-number number){
if((*tree)-number == number){
*tree = c_p;
}
else{
parent-right = c_p;
}
}
c_p-left = NULL;
}
}
}
free(p);
p = NULL;
return 0;
}