#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//입력은 while과 다중if문을 써보자...
//출력은 가장 왼쪽으로 타고와서 왼쪽이 0일때 최소값 출력.
//그다음 오른쪽에 뭐가 없으면 타고 올라감. 왼쪽에 뭐가 없으면 오른쪽에 뭐가 있는지 확인후 없으면 타고 올라감.
typedef struct datalist{
int data;
struct datalist *left_link;
struct datalist *right_link;
}DT;
DT *newNode();
void addData(DT **root);
void outputData(DT **root);
void main(){
DT *root=0;
int select1,select2;
while(1){
abc:
system("cls");
printf("#################################\n");
printf("1.데이터 저장\n");
printf("2.데이터 크기순 출력\n");
printf("3.종료\n");
printf("#################################\n\n");
printf("작업선택 : ");
scanf("%d",&select1);
if(select1==1){
addData(&root);
}
else if(select1==2){
outputData(&root);
printf("메뉴로 돌아갑니다 (1 입력) : ");
scanf("%d",&select2);
goto abc;
}
else if(select1==3){
system("cls");
printf("종료합니다. \n");
free(root);
exit(0);
}
else{
printf("다시 입력하세요 \n");
goto abc;
}
}
}
DT *newNode(){
DT *newnode = (DT*)malloc(sizeof(DT));
newnode->left_link=0;
newnode->right_link=0;
return newnode;
}
void addData(DT **root){
DT *loop;
int input;
system("cls");
printf("저장할 자료 입력 : ");
scanf("%d",&input);
if( (*root) == 0 ){
DT *new> newdata->> *root=newdata;
printf("ROOT 데이터 %d 가 입력되었습니다.\n",(*root)->data);
return;
}
else{
loop=*root;
if( input >= loop->data ){
if(loop->right_link==0){
DT *new> newdata->> loop->right_link=newdata;
return;
}
else{
loop=loop->right_link;
while(loop != 0 ){
if(input >= loop->data){
if(loop->right_link==0){
DT *new> newdata->> loop->right_link=newdata;
return;
}
loop=loop->right_link;
}
else if(input < loop->data){
if(loop->left_link==0){
DT *new> newdata->> loop->left_link=newdata;
return;
}
loop=loop->left_link;
}
}
}
}
if ( input < loop->data ){
if(loop->left_link==0){
DT *new> newdata->> loop->left_link=newdata;
return;
}
else{
loop=loop->left_link;
while(loop != 0 ){
if(input >= loop->data){
if(loop->right_link==0){
DT *new> newdata->> loop->right_link=newdata;
return;
}
loop=loop->right_link;
}
else if(input < loop->data){
if(loop->left_link==0){
DT *new> newdata->> loop->left_link=newdata;
return;
}
loop=loop->left_link;
}
}
}
}
}
}
void outputData(DT **root){
DT *loop=*root;
DT *loopA=0;
DT *loopB=0;
DT *loopC=0;
system("cls");
printf("크기순으로 출력합니다. \n");
while(loop != 0){
if( loop->left_link == 0 ){
printf("%d\n",loop->data);
if( loop->right_link == 0 ){
loop = *root;
continue;
}
}
loopA=loop;
loop=loop->left_link;
}
}
이진검색트리 공부중인데 재귀함수따윈 안쓰고 while문으로만 돌려볼라고 씨름중이다.
스택 따로 선언 안하고 하고싶은데 대가리가 돌질 않는다. 조언좀 해줘라.
조공은 오드리햅번으로 끝낸다
댓글 0