#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문으로만 돌려볼라고 씨름중이다.


스택 따로 선언 안하고 하고싶은데 대가리가 돌질 않는다. 조언좀 해줘라.


조공은 오드리햅번으로 끝낸다