트리에서 free하는건데요 소스간단하니 좀 봐주세요
반혈
연습삼아 해봣는데요트리 만들고 큰값을 free하는건데요맨 아래쪽 함수에서 보면 주석 달앗거든요 안되는 부분free(p)해서 트리에서 날려버릴라고 했는데 에러나서일단 0으로 초기화 했는데 보시구안되는 이유좀 써주세요 모르겠네여#includestdio.h
#includestdlib.htypedef struct node *treepointer;
typedef struct node
{
int data;
treepointer left,right;
}node;treepointer insert(treepointer p, int k); //트리 삽입
void Treeprint(treepointer p); //트리 출력
void MuxDel(treepointer p, int a); //가장 큰값 삭제
void main()
{
int i,j,k=0;
int arr[]={14,5,3,4,1,11,17,8,15}; //맨 처음 배열을 초기화 했습니다.
treepointer root;
root=(treepointer)malloc(sizeof(node));
root-data=10; //루트를 10이라고 초기화 했습니다.
root-left=NULL;
root-right=NULL;
for(i=0; i9; i++)
{
insert(root,arr[i]);
}
printf(######## ascending order #########\n);
Treeprint(root);
printf(\n);
printf(\n);
for(k=0; k5; k++) //2번만제거
{
printf( Delete : );
scanf(%d,&j);
MuxDel(root,j);
Treeprint(root);
printf(\n);
}
}treepointer insert(treepointer p, int k) //위 배열을 트리로 삽입
{
treepointer temp;
if(p == NULL)
{
temp=(treepointer)malloc(sizeof(node));
temp-data=k;
temp-left=NULL;
temp-right=NULL;
return temp;
}else if( p-data k)
{
p-left=insert(p-left,k);
return p;
}
else if( p-data k)
{
p-right=insert(p-right,k);
return p;
}
return 0;
}
void Treeprint(treepointer p) //중위 순회
{ //조건이 루트보다 작은값이 왼쪽 큰값이 오른쪽이기 떄문에
if(p) //중위 순회를 하면 오름차순으로 탐색을 한다.
{
Treeprint(p-left);
printf( %d , p-data);
Treeprint(p-right);
}
}
void MuxDel(treepointer p, int a) //가장 큰값을 삭제
{ //소스는 가장큰값을 입력해야만 삭제가 이루어집니다.
while(p)
{
if(p-data == a)
{
if(p-left != NULL ) //왼쪽 자식이 NULL값이 아닐때
{
p-data=p-left-data; //왼쪽 자식의 값을 원래 자기 위치에 놓고
p-left=NULL; //왼쪽 자식의 주소를 NULL로 지정해줍니다.
break;
}
else if(p-left == NULL ) //왼쪽 자식이 NULL값 일때
{
//free(p); // 노드를 Free하여 트리에서 끊어버립니다.
//p=NULL; // 그런데 Free와 p=NULL 쓰면 에러가 나서;;;
p-data=NULL; //삭제가 안되서 0값으로 초기화를 했습니다.
}
}
p=p-right;
}
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2655440 | test파일이 안 되요. (2) | 리라 | 2024-05-19 |
2655416 | 고수님들 도움이 절실합니다. (2) | 세리 | 2024-05-19 |
2655361 | 엔터 입력받을때까지 기다리는 getchar (1) | 큰모음 | 2024-05-19 |
2655328 | 함수에서 포인터 (3) | 모아 | 2024-05-18 |
2655299 | 아이콘바꾸는법..? | 소 | 2024-05-18 |
2655271 | scanf 입력받으면 쭉 실행되는.. (5) | ComeOn | 2024-05-18 |
2655184 | 이 세개 프로그램좀 해결해주실.... 고수님들???? (3) | 말달리자 | 2024-05-17 |
2655129 | 다차원 배열 원소들 주소계산하는거 질문이요~ | 터전 | 2024-05-17 |
2655103 | AVRstudio MoveAxis. MoveLine 함수질문 | 앨버트 | 2024-05-16 |
2655072 | 콘솔창의 위치와 크기를 정하고 싶습니다. | 딥레드 | 2024-05-16 |
2655044 | 자료구조랑 online judge site에 대해서 질문있습니다... (1) | 뽀송뽀송 | 2024-05-16 |
2655016 | 별찍기 문제 중 이해안되는 부분이 있어요... | 도전중 | 2024-05-16 |
2654986 | 입력받은 성적을 배열에 저장하기 (3) | 안녕나야 | 2024-05-15 |
2654959 | ===========-이런거 미리 지정하는법 (1) | 김자영 | 2024-05-15 |
2654930 | 도와주십시요 ㅜㅜ 자료구조 ㅜㅜ | 도널드 | 2024-05-15 |
2654881 | PID 모듈 검색 부분 질문합니다 . | 이름없음 | 2024-05-14 |
2654850 | 조건에 만족하는 다음 수를 찾고 싶습니다. | 초엘 | 2024-05-14 |
2654790 | 두파일간 byte단위 txt파일 복사 中 | 슬찬 | 2024-05-14 |
2654768 | 사전만들기 입니다. | 여우By | 2024-05-13 |
2654716 | c언어 고수님들 답좀적어주세요 급합니다 ㅠㅠ | 한말글 | 2024-05-13 |