Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

새싹교실/2017/따라와반/과제방/자료구조/5회차: Difference between revisions

From ZeroWiki
imported>wb092311
({CREATE})
 
No edit summary
Line 16: Line 16:
= 이민욱 =
= 이민욱 =
== 미로 탐색 ==
== 미로 탐색 ==
  (코드를 여기에)
  #include <stdio.h>
#include <stdlib.h>
typedef struct __Node{
    char Data;
    struct __Node* Left;
    struct __Node* Right;
} Node;
void SetNode(Node* node, char data);
Node* SearchNode(Node* tree, char data);
void SetLeft(Node* Root, Node* Child);
void SetRight(Node* Root, Node* Child);
void DestroyTree(Node* Root);
void preorder(Node* Root);
void Inorder(Node* Root);
void Postorder(Node* Root);
int main(){
    int i, j;
    int N;
    char Parent, Right, Left;
    Node *tmp, *tmp2;
    Node* Root = (Node*)malloc(sizeof(Node));
    SetNode(Root, 'A');
    scanf("%d", &N);
    for(i=0;i<N;i++){
        scanf(" %c", &Parent);
        tmp = SearchNode(Root, Parent);
        scanf(" %c", &Left);
        if(Left!='.') {
            tmp2=(Node*)malloc(sizeof(Node));
            SetNode(tmp2, Left);
            SetLeft(tmp, tmp2);
        }
        scanf(" %c", &Right);
        if(Right!='.') {
            tmp2=(Node*)malloc(sizeof(Node));
            SetNode(tmp2, Right);
            SetRight(tmp, tmp2);
        }
    }
    preorder(Root);
    printf("\n");
    Inorder(Root);
    printf("\n");
    Postorder(Root);
    printf("\n");
    DestroyTree(Root);
    return 0;
}
void SetNode(Node* node, char data){
    node->Left=NULL;
    node->Right=NULL;
    node->Data = data;
}
Node* SearchNode(Node* tree, char data){
    Node* tmp;
    if(tree==NULL) return NULL;
    if(tree->Data==data) return tree;
    tmp=SearchNode(tree->Left, data);
    if(tmp!=NULL) return tmp;
    tmp=SearchNode(tree->Right, data);
    if(tmp!=NULL) return tmp;
    return NULL;
}
void DestroyTree(Node* Root){
    if(Root==NULL) return;
    free(Root);
    DestroyTree(Root->Left);
    DestroyTree(Root->Right);
}
void SetLeft(Node* Root, Node* Child){
    Root->Left = Child;
}
void SetRight(Node* Root, Node* Child){
    Root->Right = Child;
}
void preorder(Node* Root){
    printf("%c", Root->Data);
    if(Root->Left!=NULL) {
        preorder(Root->Left);
    }
    if(Root->Right!=NULL) {
        preorder(Root->Right);
    }
}
void Inorder(Node* Root) {
    if(Root->Left!=NULL) {
        Inorder(Root->Left);
    }
    printf("%c", Root->Data);
    if(Root->Right!=NULL) {
        Inorder(Root->Right);
    }
}
void Postorder(Node* Root){
    if(Root->Left!=NULL) {
        Postorder(Root->Left);
    }
    if(Root->Right!=NULL) {
        Postorder(Root->Right);
    }
    printf("%c", Root->Data);
}
== 후위표기식 ==
== 후위표기식 ==
  (코드를 여기에)
  (코드를 여기에)

Revision as of 05:42, 12 May 2017

오늘의 실습 내용

신원준

미로 탐색

(코드를 여기에)

후위표기식

(코드를 여기에)

트리 순회

(코드를 여기에)

이민욱

미로 탐색

#include <stdio.h>
#include <stdlib.h>


typedef struct __Node{
    char Data;
    struct __Node* Left;
    struct __Node* Right;
} Node;

void SetNode(Node* node, char data);
Node* SearchNode(Node* tree, char data);
void SetLeft(Node* Root, Node* Child);
void SetRight(Node* Root, Node* Child);
void DestroyTree(Node* Root);

void preorder(Node* Root);
void Inorder(Node* Root);
void Postorder(Node* Root);

int main(){
    int i, j;
    int N;
    char Parent, Right, Left;
    Node *tmp, *tmp2;
    Node* Root = (Node*)malloc(sizeof(Node));


    SetNode(Root, 'A');

    scanf("%d", &N);

    for(i=0;i<N;i++){
        scanf(" %c", &Parent);
        tmp = SearchNode(Root, Parent);

        scanf(" %c", &Left);
        if(Left!='.') {
            tmp2=(Node*)malloc(sizeof(Node));
            SetNode(tmp2, Left);
            SetLeft(tmp, tmp2);
        }

        scanf(" %c", &Right);
        if(Right!='.') {
            tmp2=(Node*)malloc(sizeof(Node));
            SetNode(tmp2, Right);
            SetRight(tmp, tmp2);
        }
    }
    preorder(Root);
    printf("\n");

    Inorder(Root);
    printf("\n");

    Postorder(Root);
    printf("\n");

    DestroyTree(Root);

    return 0;
}


void SetNode(Node* node, char data){
    node->Left=NULL;
    node->Right=NULL;
    node->Data = data;
}
Node* SearchNode(Node* tree, char data){
    Node* tmp;
    if(tree==NULL) return NULL;
    if(tree->Data==data) return tree;
    tmp=SearchNode(tree->Left, data);
    if(tmp!=NULL) return tmp;
    tmp=SearchNode(tree->Right, data);
    if(tmp!=NULL) return tmp;
    return NULL;
}
void DestroyTree(Node* Root){
    if(Root==NULL) return;
    free(Root);
    DestroyTree(Root->Left);
    DestroyTree(Root->Right);
}
void SetLeft(Node* Root, Node* Child){
    Root->Left = Child;
}
void SetRight(Node* Root, Node* Child){
    Root->Right = Child;
}

void preorder(Node* Root){
    printf("%c", Root->Data);
    if(Root->Left!=NULL) {
        preorder(Root->Left);
    }
    if(Root->Right!=NULL) {
        preorder(Root->Right);
    }
}

void Inorder(Node* Root) {
    if(Root->Left!=NULL) {
        Inorder(Root->Left);
    }
    printf("%c", Root->Data);
    if(Root->Right!=NULL) {
        Inorder(Root->Right);
    }
}

void Postorder(Node* Root){
    if(Root->Left!=NULL) {
        Postorder(Root->Left);
    }
    if(Root->Right!=NULL) {
        Postorder(Root->Right);
    }
    printf("%c", Root->Data);
}

후위표기식

(코드를 여기에)

트리 순회

(코드를 여기에)

정석우

미로 탐색

(코드를 여기에)

후위표기식

(코드를 여기에)

트리 순회

(코드를 여기에)