목차
없음
본문내용
>fill_cnt = 1;
curr->link[1] = curr->link[0];
curr->link[0] = a_sis->link[2];
}
}
finish = TRUE;
}
else {// 형제노드가 1개일때..
if(parent->fill_cnt==2 && parent->link[1]==curr) {
// 좌측의 형제를 검사해본다.
max_left = parent->link[0];
if(max_left->fill_cnt==2) {
data_atob(parent, 0, curr, 0);
data_atob(max_left, 1, parent, 0);
max_left->rec[1].sn = -1;
max_left->fill_cnt = 1;
curr->link[1] = curr->link[0];
curr->link[0] = max_left->link[2];
curr->fill_cnt = 1;
break;
}
}
if(parent->fill_cnt==2) {// 부모가 2개의 데이터
if(parent->link[2]==curr) {// 3번째링크
data_atob(parent, 1, a_sis, 1);
parent->rec[1].sn = -1;
parent->fill_cnt = 1;
a_sis->fill_cnt = 2;
a_sis->link[2] = curr->link[0];
}
else if(parent->link[1]==curr) { // 두번째링크
data_atob(parent, 1, curr, 0);
data_atob(a_sis, 0, curr, 1);
parent->rec[1].sn = -1;
parent->fill_cnt = 1;
curr->fill_cnt = 2;
curr->link[1] = a_sis->link[0];
curr->link[2] = a_sis->link[1];
}
else {// 첫 번째 링크
data_atob(parent, 0, curr, 0);
data_atob(a_sis, 0, curr, 1);
data_atob(parent, 1, parent, 0);
parent->link[1] = parent->link[2];
parent->fill_cnt = 1;
parent->rec[1].sn = -1;
curr->fill_cnt = 2;
curr->link[1] = a_sis->link[0];
curr->link[2] = a_sis->link[1];
free(parent->link[2]);
}
finish = TRUE;
}
else {// 부모의 데이터가 1개일때..
if(parent->link[0]==curr) {// 첫번째링크
data_atob(parent, 0, curr, 0);
data_atob(a_sis, 0, curr, 1);
curr->fill_cnt = 2;
parent->fill_cnt = 0;
curr->link[1] = a_sis->link[0];
curr->link[2] = a_sis->link[1];
free(a_sis);
}
else {// 두 번째 링크
data_atob(parent, 0, a_sis, 1);
a_sis->fill_cnt = 2;
a_sis->link[2] = curr->link[0];
parent->fill_cnt = 0;
free(curr);
}
if(top==-1) {// 작업한노드가 루트면
free(ptr);
ptr = curr;
finish = TRUE;
}
else curr = parent; // 루트가 아니면
}
}
}
}
}
}
nodeptr max_search(nodeptr max_left)// 왼쪽링크중 가장 큰값의 노드를 찾는다
{
while(max_left!=NULL) {
stack[++top] = max_left;// stack에 저장
if(max_left->link[0]==NULL) return max_left;
else if(max_left->fill_cnt==1) max_left = max_left->link[1];
else if(max_left->fill_cnt==2) max_left = max_left->link[2];
}
}
void data_atob(nodeptr a, int num1, nodeptr b, int num2)// 데이터를 복사해준다
{
strcpy(b->rec[num2].name, a->rec[num1].name);
b->rec[num2].sn = a->rec[num1].sn;
b->rec[num2].gpa = a->rec[num1].gpa;
}
curr->link[1] = curr->link[0];
curr->link[0] = a_sis->link[2];
}
}
finish = TRUE;
}
else {// 형제노드가 1개일때..
if(parent->fill_cnt==2 && parent->link[1]==curr) {
// 좌측의 형제를 검사해본다.
max_left = parent->link[0];
if(max_left->fill_cnt==2) {
data_atob(parent, 0, curr, 0);
data_atob(max_left, 1, parent, 0);
max_left->rec[1].sn = -1;
max_left->fill_cnt = 1;
curr->link[1] = curr->link[0];
curr->link[0] = max_left->link[2];
curr->fill_cnt = 1;
break;
}
}
if(parent->fill_cnt==2) {// 부모가 2개의 데이터
if(parent->link[2]==curr) {// 3번째링크
data_atob(parent, 1, a_sis, 1);
parent->rec[1].sn = -1;
parent->fill_cnt = 1;
a_sis->fill_cnt = 2;
a_sis->link[2] = curr->link[0];
}
else if(parent->link[1]==curr) { // 두번째링크
data_atob(parent, 1, curr, 0);
data_atob(a_sis, 0, curr, 1);
parent->rec[1].sn = -1;
parent->fill_cnt = 1;
curr->fill_cnt = 2;
curr->link[1] = a_sis->link[0];
curr->link[2] = a_sis->link[1];
}
else {// 첫 번째 링크
data_atob(parent, 0, curr, 0);
data_atob(a_sis, 0, curr, 1);
data_atob(parent, 1, parent, 0);
parent->link[1] = parent->link[2];
parent->fill_cnt = 1;
parent->rec[1].sn = -1;
curr->fill_cnt = 2;
curr->link[1] = a_sis->link[0];
curr->link[2] = a_sis->link[1];
free(parent->link[2]);
}
finish = TRUE;
}
else {// 부모의 데이터가 1개일때..
if(parent->link[0]==curr) {// 첫번째링크
data_atob(parent, 0, curr, 0);
data_atob(a_sis, 0, curr, 1);
curr->fill_cnt = 2;
parent->fill_cnt = 0;
curr->link[1] = a_sis->link[0];
curr->link[2] = a_sis->link[1];
free(a_sis);
}
else {// 두 번째 링크
data_atob(parent, 0, a_sis, 1);
a_sis->fill_cnt = 2;
a_sis->link[2] = curr->link[0];
parent->fill_cnt = 0;
free(curr);
}
if(top==-1) {// 작업한노드가 루트면
free(ptr);
ptr = curr;
finish = TRUE;
}
else curr = parent; // 루트가 아니면
}
}
}
}
}
}
nodeptr max_search(nodeptr max_left)// 왼쪽링크중 가장 큰값의 노드를 찾는다
{
while(max_left!=NULL) {
stack[++top] = max_left;// stack에 저장
if(max_left->link[0]==NULL) return max_left;
else if(max_left->fill_cnt==1) max_left = max_left->link[1];
else if(max_left->fill_cnt==2) max_left = max_left->link[2];
}
}
void data_atob(nodeptr a, int num1, nodeptr b, int num2)// 데이터를 복사해준다
{
strcpy(b->rec[num2].name, a->rec[num1].name);
b->rec[num2].sn = a->rec[num1].sn;
b->rec[num2].gpa = a->rec[num1].gpa;
}
키워드
추천자료
소스파일 소스 MFC - ★ (숫자) 야구 게임 ★ [ VisualC++ / MFC ]
c++프로그래밍소스(제품판매점)class,if등중요소스.
C소스 : 온도 변환기 (섭시를 화시로)
해싱파일소스, hashing소스 및 보고서
[MFC 프로그램 소스] 계산기 프로그램 소스
[c- Scanner]스캐너(스케너) 소스코드 및 보고서. (lex/flex사용소스 + 직접짠 scanner.c) tiny
[수치해석]난수 선택정렬(selecttion sort) or 합병정렬(merge sort) - 1~9999범위사이의 난...
VHDL 설계 언어 실습 (문법적용) (logic1, ex1, ex2, if, 다중 if, memory if, case, for loo...
안드로이드 Calendar 달력 예제 소스파일 입니다. (소스.zip 파일)
AVR ATmega128을 이용한 LED실험 해석 (avr atmega128,led실험,led점멸,led 시프트,쉬프트,pw...
AVR UART를 이용한 시리얼 통신실험과 해석 ( AVR UART,시리얼 통신,MCU간의 통신,AVR-PC,RS-...
AVR 스위치 입력관련기술과 키 디바운싱 기술에 대해서 (스위치 입력,키 디바운싱,키입력,키 ...
[통신이론] 자바(JAVA) CRC순환 코드 (순환 중복 검사 CRC방식에 대한 설명 및 부호화 과정, ...
소개글