목차
1.개요
2.절차
3.소스
4.결과
5.소감문
2.절차
3.소스
4.결과
5.소감문
본문내용
) : \");
scanf(\"%d\", &n);
switch(n){
case 1 : { // 원본을 출력 원할 경우
if(ptr){
printf(\"\\n[원본의 전위순회] \");
preorder(ptr); // 전위 순회 출력 함수 호출
printf(\"\\n[원본의 후위순회] \");
postorder(ptr); // 후위 순회 출력 함수 호출
printf(\"\\n\");
}
if(!ptr) { // 트리가 없을 경우
printf(\"바보야 아까 원본 니가 집에 가라며!!\\n\");
print_menu(); // 다시 출력 메뉴함수 호출
}
break;}
case 2 : { // 사본을 출력 원할 경우
if (ptr_2){
printf(\"\\n[사본의 전위순회] \");
preorder(ptr_2); // 전위 순회 출력 함수 호출
printf(\"\\n[사본의 후위순회] \");
postorder(ptr_2); // 후위 순회 출력 함수 호출
printf(\"\\n\");
}
if(!ptr_2) {
printf(\" 복사후 출력 하세요 (바보 사본이 어딧냐?)\\n\");
print_menu(); // 다시 출력 메뉴함수 호출
}
break;}
default : { // 두경우 이외의 경우 입력할 경우
printf(\" 바보 숫자두 못 읽냐? 다시해 임마\\n\");
print_menu();
break;}
}
}
//트리를 복사하는 함수
node_pointer copy(node_pointer original) // 원본 ptr을 인자로 받음
{
node_pointer temp; // 복사 받을 노드 선언
while(original){ // 원본 노드가 존재할 동안
temp = (node_pointer)malloc(sizeof(struct tree_node)); // 복사 받을 노드 생성
if(original->tag == 0){ // 데이타 노드 일때
temp->tag = original->tag; // 원본 태그값을 복사 함(값은 0)
temp->item = original->item; // 원본 데이타를 복사 함
temp->rlink=copy(original->rlink); // 링크 노드로 이동
}
else { // 링크 노드 일때
temp->tag = original->tag; // 원본 태그값을 복사 함(값은 1)
temp->dlink=copy(original->dlink); // 데이타 노드로 이동
temp->rlink=copy(original->rlink); // 형제 링크 노드로 이동
}
return temp; // 복사된 temp를 리턴함
}
return NULL; // 원본 노드가 없을시 NULL 리턴
}
//트리의 동일성 검사 함수
int equal(node_pointer first, node_pointer second) // 원본 ptr과 사본 ptr_2을 인자로 받음
{
if(!first==!second) return 1; // 원본과 사본 모두 트리가 없을 경우 \'1\' 리턴
while(first){ // 원본을 비교 대상으로 함(즉, 원본이 있을때)
if(first->tag == 0){ // 데이타 노드일때
if(first->tag != second->tag) // 노드의 태그값이 다르면 \'0\' 리턴
return 0;
else if(first->item !=second ->item) // 노드의 데이타가 다르면 \'0\' 리턴
return 0;
equal(first->rlink, second->rlink); // 링크 노드로 이동
}
else { // 링크 노드일때
if(first->tag != second->tag) // 노드의 태그값이 다르면 \'0\' 리턴
return 0;
equal(first->dlink, second->dlink); // 데이타 노드로 이동
equal(first->rlink, second->rlink); // 형제 링크 노드로 이동
}
return 1; // 원본과 사본이 같으면 \'1\' 리턴
}
return NULL; // 원본이 없을때 NULL 리턴
}
// 트리 삭제 메뉴 함수
void del_menu()
{
int n; // 삭제 메뉴 저장 변수
printf(\"어떤 트리를 삭제 하시겠습니까 (1. 원본 2. 사본 ) : \");
scanf(\"%d\", &n);
switch(n){
case 1 : { // 원본을 삭제 원할 경우
all_del(ptr); // 원본 ptr인자로 트리 삭제 함수 호출
printf(\"원본 트리를 삭제했습니다.\\n\");
break;}
case 2 : { // 사본을 삭제 원할 경우
all_del(ptr_2); // 사본 ptr_2인자로 트리 삭제 함수 호출
printf(\"사본 트리를 삭제했습니다.\\n\");
break;}
default : printf(\" 바~보 그런 항목 없으야~~\\n\"); // 두메뉴 이외의 경우 입력시 출력
}
}
//트리 전체 삭제 함수
void all_del(node_pointer del_node)
{
if(del_node){ // ptr이 있다면.. 즉, 트리가 존재한다면..
if(del_node->tag == 0){ // 즉, 데이타 노드이면
all_del(del_node->rlink); // 링크 노드로 이동
if(del_node==ptr) ptr=NULL; // 삭제 대상이 루트노드일때 ptr에 NULL을 넣음
if(del_node==ptr_2) ptr_2=NULL; // 삭제 대상이 루트노드일때 ptr_2에 NULL을 넣음
free(del_node); //노드 삭제
}
else { // 즉, 링크 노드이면
all_del(del_node->dlink); //데이타 노드로 이동
all_del(del_node->rlink); //형제 링크로 이동
}
}
}
5. 소 감 문 (여백 문제로 순서를 바꿨으니 수정하세요)
먼저 한학기 동안 자료구조론이라는 과목을 통하여 000 교수님을 뵙게 된 것을 영광으로 생각합니다. 교수님을 통하여 프로그램에 과한 지식이 많이 쌓였다고 자신있게 말할수 있습니다.
이번 Term을 통하여 작게는 트리구조 라는 개념을 보다 잘 이해하게 된 것 같고, 크게는 조원들과의 화합을 통하여 탐
scanf(\"%d\", &n);
switch(n){
case 1 : { // 원본을 출력 원할 경우
if(ptr){
printf(\"\\n[원본의 전위순회] \");
preorder(ptr); // 전위 순회 출력 함수 호출
printf(\"\\n[원본의 후위순회] \");
postorder(ptr); // 후위 순회 출력 함수 호출
printf(\"\\n\");
}
if(!ptr) { // 트리가 없을 경우
printf(\"바보야 아까 원본 니가 집에 가라며!!\\n\");
print_menu(); // 다시 출력 메뉴함수 호출
}
break;}
case 2 : { // 사본을 출력 원할 경우
if (ptr_2){
printf(\"\\n[사본의 전위순회] \");
preorder(ptr_2); // 전위 순회 출력 함수 호출
printf(\"\\n[사본의 후위순회] \");
postorder(ptr_2); // 후위 순회 출력 함수 호출
printf(\"\\n\");
}
if(!ptr_2) {
printf(\" 복사후 출력 하세요 (바보 사본이 어딧냐?)\\n\");
print_menu(); // 다시 출력 메뉴함수 호출
}
break;}
default : { // 두경우 이외의 경우 입력할 경우
printf(\" 바보 숫자두 못 읽냐? 다시해 임마\\n\");
print_menu();
break;}
}
}
//트리를 복사하는 함수
node_pointer copy(node_pointer original) // 원본 ptr을 인자로 받음
{
node_pointer temp; // 복사 받을 노드 선언
while(original){ // 원본 노드가 존재할 동안
temp = (node_pointer)malloc(sizeof(struct tree_node)); // 복사 받을 노드 생성
if(original->tag == 0){ // 데이타 노드 일때
temp->tag = original->tag; // 원본 태그값을 복사 함(값은 0)
temp->item = original->item; // 원본 데이타를 복사 함
temp->rlink=copy(original->rlink); // 링크 노드로 이동
}
else { // 링크 노드 일때
temp->tag = original->tag; // 원본 태그값을 복사 함(값은 1)
temp->dlink=copy(original->dlink); // 데이타 노드로 이동
temp->rlink=copy(original->rlink); // 형제 링크 노드로 이동
}
return temp; // 복사된 temp를 리턴함
}
return NULL; // 원본 노드가 없을시 NULL 리턴
}
//트리의 동일성 검사 함수
int equal(node_pointer first, node_pointer second) // 원본 ptr과 사본 ptr_2을 인자로 받음
{
if(!first==!second) return 1; // 원본과 사본 모두 트리가 없을 경우 \'1\' 리턴
while(first){ // 원본을 비교 대상으로 함(즉, 원본이 있을때)
if(first->tag == 0){ // 데이타 노드일때
if(first->tag != second->tag) // 노드의 태그값이 다르면 \'0\' 리턴
return 0;
else if(first->item !=second ->item) // 노드의 데이타가 다르면 \'0\' 리턴
return 0;
equal(first->rlink, second->rlink); // 링크 노드로 이동
}
else { // 링크 노드일때
if(first->tag != second->tag) // 노드의 태그값이 다르면 \'0\' 리턴
return 0;
equal(first->dlink, second->dlink); // 데이타 노드로 이동
equal(first->rlink, second->rlink); // 형제 링크 노드로 이동
}
return 1; // 원본과 사본이 같으면 \'1\' 리턴
}
return NULL; // 원본이 없을때 NULL 리턴
}
// 트리 삭제 메뉴 함수
void del_menu()
{
int n; // 삭제 메뉴 저장 변수
printf(\"어떤 트리를 삭제 하시겠습니까 (1. 원본 2. 사본 ) : \");
scanf(\"%d\", &n);
switch(n){
case 1 : { // 원본을 삭제 원할 경우
all_del(ptr); // 원본 ptr인자로 트리 삭제 함수 호출
printf(\"원본 트리를 삭제했습니다.\\n\");
break;}
case 2 : { // 사본을 삭제 원할 경우
all_del(ptr_2); // 사본 ptr_2인자로 트리 삭제 함수 호출
printf(\"사본 트리를 삭제했습니다.\\n\");
break;}
default : printf(\" 바~보 그런 항목 없으야~~\\n\"); // 두메뉴 이외의 경우 입력시 출력
}
}
//트리 전체 삭제 함수
void all_del(node_pointer del_node)
{
if(del_node){ // ptr이 있다면.. 즉, 트리가 존재한다면..
if(del_node->tag == 0){ // 즉, 데이타 노드이면
all_del(del_node->rlink); // 링크 노드로 이동
if(del_node==ptr) ptr=NULL; // 삭제 대상이 루트노드일때 ptr에 NULL을 넣음
if(del_node==ptr_2) ptr_2=NULL; // 삭제 대상이 루트노드일때 ptr_2에 NULL을 넣음
free(del_node); //노드 삭제
}
else { // 즉, 링크 노드이면
all_del(del_node->dlink); //데이타 노드로 이동
all_del(del_node->rlink); //형제 링크로 이동
}
}
}
5. 소 감 문 (여백 문제로 순서를 바꿨으니 수정하세요)
먼저 한학기 동안 자료구조론이라는 과목을 통하여 000 교수님을 뵙게 된 것을 영광으로 생각합니다. 교수님을 통하여 프로그램에 과한 지식이 많이 쌓였다고 자신있게 말할수 있습니다.
이번 Term을 통하여 작게는 트리구조 라는 개념을 보다 잘 이해하게 된 것 같고, 크게는 조원들과의 화합을 통하여 탐
소개글