이진트리 삽입관련
글쓴이: 여리왕자 / 작성시간: 수, 2005/12/21 - 4:42오전
한동안 짜지 않다가 오랜만에 건드렸더니...
또 했갈리네요...
이진트리 삽입부랑 프린트 함수만 조금 짠 소스인데요...
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct man MAN;
struct man {
int age;
MAN * left;
MAN * right;
};
MAN * start, * imsi;
int init( void );
void insert( void );
void del( void );
void search( void );
void print( void );
void main( void )
{
int sel;
start = NULL;
while ( sel != 5 ) {
sel = init();
switch ( sel ) {
case 1 : insert();
break;
case 2 : del();
break;
case 3 : search();
break;
case 4 : print();
break;
case 5 : sel = 5;
}
}
}
int init( void )
{
int sel;
printf("*** Binary Tree ***\n");
printf("1.insert\n2.del\n3.search\n4.printf\n5.end\n");
printf("select: ");
scanf("%d", &sel);
return sel;
}
void insert( void )
{
int num;
MAN * temp;
temp = imsi = start;
printf("insert: ");
scanf("%d", &num);
while ( temp != NULL ) {
if ( num < temp->age ) temp = temp->left ;
else temp = temp->right ;
}
temp = ( MAN * )malloc( sizeof( MAN ) );
if ( start == NULL ) start = temp;
temp->age = num;
temp->left = NULL;
temp->right = NULL;
}
void del( void )
{
}
void search( void )
{
}
void print( void )
{
printf("%d\t%d\t%d\n\n", start->age, start->left, start->right);
}
insert함수 안의 while문이 문제네요...
조건 분기까지 다 돌아가는데... 구조체가 연결이 안되네요...
이전에 링크드 리스트 만질때도 2중 포인터로 어떻게 해서 연결시켰던거 같던데....
생각이 안나네요... 왜 연결이 안되는거죠?
고수님들... 헬프 미~~
Forums:


Re: 이진트리 삽입관련
insert 에 있는 부분입니다 :) 뭔가 이상하지 않나요?
while 를 벗어나고 나면 언제나 temp 에 있는 값은 NULL 입니다... while 안에서 하려고 했던 것들에 어떠한 의미도 부여할 수가 없네요 ...
new = malloc(...); new->age = num; new->left = NULL; new->right = NULL; if ( root == NULL ){ root = new; return; } do { if ( num < temp->age ){ if( temp->left == NULL ){ temp->left = new; return; } temp = temp->left ; } else{ if( temp->right == NULL ){ temp->right = new; return; } temp = temp->right ; } } while( 1 );정도가 되어야 하지 않을까 싶습니다 :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
답변 감사합니다
근데 님 소스가... 에러가 뜨는데요... ㅡ,.ㅡ;;
소스 다시 분석하기 귀찮아서 다시 짲는데....
제대로 돌아가네요...
#include <stdio.h> #include <conio.h> #include <stdlib.h> typedef struct man MAN; struct man { int age; MAN * left; MAN * right; }; MAN * start, * imsi; int init( void ); void insert( void ); void del( void ); void search( void ); void print( void ); void main( void ) { int sel; start = NULL; while ( sel != 5 ) { sel = init(); switch ( sel ) { case 1 : insert(); break; case 2 : del(); break; case 3 : search(); break; case 4 : print(); break; case 5 : sel = 5; } } } int init( void ) { int sel; printf("*** Binary Tree ***\n"); printf("1.insert\n2.del\n3.search\n4.printf\n5.end\n"); printf("select: "); scanf("%d", &sel); return sel; } void insert( void ) { int num; MAN * temp, * imsi; printf("insert: "); scanf("%d", &num); temp = (MAN * )malloc( sizeof(MAN) ); temp->age = num; temp->left = NULL; temp->right = NULL; imsi = start; while ( start != NULL ) { if ( num < imsi->age ) { if ( imsi->left != NULL ) imsi = imsi->left; else if ( imsi->left == NULL ) { imsi->left = temp; imsi = imsi->left; break; } } else if ( num > imsi->age ) { if ( imsi->right != NULL ) imsi = imsi->right; else if ( imsi->right == NULL ) { imsi->right = temp; imsi = imsi->right; break; } } else { printf("\n\nThere is the thing of same!\n"); printf("insert again!\n"); printf("insert: "); scanf("%d", &num); } } if ( start == NULL ) start = temp; } void del( void ) { } void search( void ) { } void print( void ) { printf("%d", start->age); if ( start->left != NULL ) printf("\t%d", start->left->age); if ( start->left->left != NULL ) printf("\t%d", start->left->left->age); if ( start->right != NULL ) printf("\t%d\n\n", start->right->age); }요렇게 짯답니다.... ㅡ.ㅡ;;
아... 끝없는 프로그래밍의 세계... 정복하고파...
댓글 달기