고수님들 DFS(깊이우선검색) 질문있습니다. (논리적?)에러를 못잡겠습니다.
가온
질문 제목 : dfs(깊이우선검색, 스택이용) 질문입니다.밑에 코드 그대로 가져다 실행시키시면 바로 실행되는데요 그중 일부 노드는 경로가 구해지는대
일부 노드는 메모리 에러가 뜹니다.질문 내용 :
우선 코드 입니다.
#include stdio.h
#include stdlib.h
#include string.h
typedef struct treenode{
struct treenode *parent;
struct treenode *left;
int key;
struct treenode *right;
}treenode;
treenode *stack;
int size;
int top;
void initstack(int asize) //스택생성
{
size=asize;
stack=(treenode *)malloc(size*sizeof(treenode));
top=-1;
}
void freestack()//스택제거
{
free(stack);
}
int push(treenode* node)//스택 삽입
{
if (top size-1) {
top++;
stack[top]=*node;
return 0;
} else {
return -1;
}
}
int pop() //스택 탑 삭제
{
if (top = 0) {
stack[top--];
return 0;
} else {
return -1;
}
}
void insert_node(treenode **root, int key) //트리 삽입
{
treenode *p, *t;
treenode *n;
t=*root;
p=null;
while(t != null){
if(key == t-key)
return;
p=t;
if(keyt-key)
t=t-left;
else
t=t-right;
}
n=(treenode *)malloc(sizeof(treenode));
if(n==null)
return;
n-key=key;
n-left=n-right=null;
if(p!=null)
if(keyp-key)
{
p-left=n;
n-parent=p;
}
else
{
p-right=n;
n-parent=p;
}
else
{
*root=n;
(*root)-parent=n;
}
}
int shortest_route_stack(treenode* root, int key) //dfs이용해서 최단경로 찾고 그걸 출력하기위해서 부모노드사용
{
treenode* p=root;
push(p);
if(stack[top].key==key)
{
printf(경로 :%d\n, stack[top].key);
}
else
{
while(1)brle(1)
{
if(stack[top].key==key)
{
if(p-key!=stack[top].key)
p=&stack[top];
while(p-key!=root-key)
{
printf(%d-, p-key);
p=p-parent;
}
printf(%d\n, root-key);
return 0;
}
if((p-right==null)&&(p-left==null))
{
pop();
p=&stack[top];
}
else
{
pop();
if(p-right!=null) //여기가 아마 제가 에러가 뜨는 이유라고 생각이 드는데요...
push(p-right);안될라면 다안돼지 어떤건 돼고 몇개는 안돼니깐...미치겠습니다 ㅠ
if(p-left!=null)
push(p-left);
if(p-right-key==stack[top].key)
p=p-right;
if(p-left-key==stack[top].key)
p=p-left;
}
}
}
return 0;
}
preorder(treenode *root){//전체출력
if(root){
printf(%d , root-key);
preorder(root-left);
preorder(root-right);
}
}
int main()
{
treenode *list=null;
int sel=0, num=0;
initstack(256);
insert_node(&list, 10);
insert_node(&list, 5);
insert_node(&list, 3);
insert_node(&list, 7);
insert_node(&list, 15);
insert_node(&list, 12);
insert_node(&list, 18);
do{
puts(---------------------------------------------------------------);
puts(1.전체출력 2.최단경로 3.종료);
puts(---------------------------------------------------------------);
printf(사용하실 메뉴를 입력하세요 : );
scanf(%d, &sel);
switch(sel)
{
case 1:
puts(전체출력!!);
preorder(list);
puts();
puts();
puts();
break;
case 2:
printf(최단 경로를 확인하고 싶은 노드 입력 : );
scanf(%d, &num);
shortest_route_stack(list, num);
break;
case 3:
exit(1);
break;
}
}while(sel!=3);
return 0;
}
----------------------------------------------------------------------------
이걸 그대로 실행하시면 우선 입력은 제가 기본적으로 입력을 받아놨구요
입력은 이진트리 형태인데
10
515
37 1218
이러한 형태로 트리가 지금 입력돼어있는데요
10, 5, 15, 3, 7은 dfs탐색으로 최단경로가 탐색이돼는데요... 12와 18은 메모리 에러가 뜹니다.
짧은주석이나마 달아놨습니다ㅠㅠ 정말 제가 연습장에 스택그려가면서 여러번 해봤지만...
메모리 에러가 뜨는 이유를 모르겠습니다.........재발 도와주세요 고수님들 이거가지고 몇일째 고민중인지 한숨만...휴...
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |