이진트리 관련 질문입니다ㅜㅜ
sin
질문 제목 : 이진트리의 깊이를 구하는 함수를 만들어봤습니다.이진트리의 깊이를 구하는 함수가 컴파일은 정상적으로 되는데 실행이 안되네요.. 어떤점이 문제일까요ㅜㅜ;; 두시간 고민해서 코딩한건데...질문 내용 :
이진트리 형식은
typedef struct treenode
{
struct treenode *left;
int data;
struct treenode *right;
} bintree;와 같이 설정했습니다. 이진 검색트리라서 작으면 왼쪽, 크면 오른쪽 이런식입니다.문제의 함수입니다..
int get_depth(bintree *tree)
{
bintree sample; /*주어진 트리를 복사해서 주어진 트리를 원래대로 유지하면서 깊이를 구한다*/
bintree *now, *lastoneway; /*트리 안 내용을 살펴보기 위한 포인터*/
int max=1, depth=1, pastoneway=0; /*각각 현재까지 구한 최대 깊이, 현재 최대깊이, 방금 길이 외길이었는지 여부를 나타내는 변수*/
sample=*tree; /*주어진 트리를 복사한다*/
now=&sample; /* 살펴볼 곳을 초기화한다*/
while(1){ /*무한반복*/
if((now-left)!=null){ /*살펴보는곳의 왼쪽이 널이 아니면*/
if((now-right)!=null){ /*오른쪽도 살펴봐서 널이 또 아니면 이곳은 외길이 아니므로*/
if(pastoneway){ /*방금 길이 외길이었는지를 살펴서*/
lastoneway=null; /*지금 길이 외길이 아니므로 최종적으로 외길이었던 곳의 주소를 저장한 포인터의 내용을 제거*/
pastoneway=0; /*방금 외길이 아니었다고 수정*/
}
}
if(!pastoneway){ /*반면 지금이 왼쪽밖에 없는 외길이고 지금까지 지나온길이 외길이 아니었으면*/
lastoneway=now; /*이곳을 지금까지 있었던 곳 중 최종적인 외길로 설정*/
pastoneway=1; /*방금 외길이었다고 수정*/
}
now=now-left; /*왼쪽으로 이동*/
depth++; /*이동했으니 깊이를 1 증가*/
} else if((now-right)!=null){ /*왼쪽이 없었으면 이번엔 오른쪽을 조사해서 길이 있으면 이곳은 외길이므로*/
if(!pastoneway){ /*역시 방금 길이 외길이었는지를 조사해서 외길이 아니었으면*/
lastoneway=now; /*지금 길이 최종적으로 외길이라고 수정*/
pastoneway=1; /*방금 지나온 길이 외길이라고 수정*/
}
now=now-right; /*오른쪽으로 이동*/
depth++; /*이동했으니 깊이를 1 증가*/
} else { &nbssp; /*오른쪽, 왼쪽 모두 길이 없으면 잎 에 도착한것이므로 최대깊이와 비교한다*/
if(maxdepth) max=depth; /*깊이비교해서 최대이면 갈아치운다*/
if(lastoneway==null) free(now); /*지금까지 조사한 길은 이제 필요없으니 지워버린다*/
else free(lastoneway); /*최종 외길이 있으면 최종외길을 지워버리면 속도가 훨씬 빠를것이다*/
if(depth==1) break; /*둘다 길이없어서 왔는데 깊이가 1이면 루트까지 다 조사한것이므로 끝낸다*/
else{
depth=1; /*루트부터 다시 시작한다*/
now=&sample; /*루트부터 다시 시작한다*/
}
}
}
return max; /*끝냈으면 최대값을 반환한다*/
}
함수를 컴파일 할때는 이상이 없었는데, 실행을 하면 오류가 나서 종료돼버립니다. 어디서 문제가 발생한걸까요...ㅜㅜ
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2697432 | 서버 만드는 함수에서 궁금한게있어요~ | 파랑 | 2025-06-07 |
2697401 | 열혈강의 문제오류 (1) | 꿈 | 2025-06-07 |
2697374 | 기초적인 C언어 프로그래밍 입니다. | 얼 | 2025-06-07 |
2697341 | 좌우대칭 문제인데 Q가 입력되면 종료가 되야하는데 되지않습니다 | 무지개 | 2025-06-07 |
2697314 | fprintf와 fscanf 로 파일 입출력 할떄 | 밝음이 | 2025-06-06 |
2697293 | 툴 소스 뽑아내는법 | 도움 | 2025-06-06 |
2697264 | 소소한거 두어가지 질문할께요~ (8) | 별솔 | 2025-06-06 |
2697235 | scanf로 인풋 받을 때?! | 보담 | 2025-06-06 |
2697207 | 열혈강의 연습문제 질문이요~ (2) | 맥적다 | 2025-06-05 |
2697182 | strcmp, strtok - 어떤 기능을 하는지... | 루다 | 2025-06-05 |
2697129 | [질문] 아래 저축액을 계산하는 프로그램 ㅠ 추가 질문 (7) | 찬늘 | 2025-06-05 |
2697072 | 쌩초보 질문! (1) | 얀 | 2025-06-04 |
2697050 | 도움부탁드립니다.. | 화이트 | 2025-06-04 |
2697023 | gotoxy함수, 어떻게 사용하죠? (3) | 적송 | 2025-06-04 |
2696994 | c언어를 막 시작한 초보인데 질문이 있어용 ㅠㅠ (2) | 귀1여운렩 | 2025-06-03 |
2696944 | 윈도우 콘솔프로그램 질문드립니다 (2) | 꽃님이 | 2025-06-03 |
2696882 | c언어 입력받기 질문 입니다 (2) | 흰추위 | 2025-06-02 |
2696853 | 문자열은 정적메모리에 할당된다고 하는데 정적메모리가 뭡니까?? (6) | 다온 | 2025-06-02 |
2696799 | c c++언어입문전에 파이톤이나 자바스크립트배워두면.. (2) | 앨런 | 2025-06-02 |
2696747 | size of 연산자에 대해 질문이 있습니다. (3) | 유진공주 | 2025-06-01 |