Step by step

My diary

...

Search

breakinformation. Powered by Blogger.

2019년 9월 30일 월요일

Binary tree _Alpha (need modify)


"binary tree.h"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#ifndef _BINARY_TREE_
#define _BINARY_TREE_
 
struct Child_Node_Type_Of_Binary_Tree {
 
    char data;
 
    struct Child_Node_Type_Of_Binary_Tree* Pointer_Left_Child;
    struct Child_Node_Type_Of_Binary_Tree* Pointer_Right_Child;
};
 
struct Parents_Node_Type_Of_Binary_Tree {
 
    struct Child_Node_Type_Of_Binary_Tree* Pointer_Root;
};
 
struct Binary_Tree_Type {
 
    int Number_Of_Current_Elements;
 
    struct Parents_Node_Type_Of_Binary_Tree* Header;
};
 
struct Binary_Tree_Type* Create_Binary_Tree(void);
int Insert_Binary_Tree_Element(struct Binary_Tree_Type* Pointer_Binary_Tree, struct Child_Node_Type_Of_Binary_Tree element);
void Display_Binary_Tree(struct Binary_Tree_Type* Pointer_Binary_Tree, int level, char type);
 
#endif // !_BINARY_TREE_
 
#ifndef _COMMON_DEFINITION_
#define _COMMON_DEFINITION_
 
#define TRUE    1
#define FALSE    0
 
#endif // !_COMMON_DEFINITION_
 
cs
"binary tree.c"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "binary tree.h"
 
struct Binary_Tree_Type* Create_Binary_Tree(void) {
 
    struct Binary_Tree_Type* Pointer_Binary_Tree = (struct Binary_Tree_Type*malloc(1 * sizeof(struct Binary_Tree_Type));
    if ((struct Binary_Tree_Type*)Pointer_Binary_Tree == NULL) {
 
        printf("Error! The dynamic memory allocation failed. Create_Binary_Tree()\n");
        return NULL;
    }
    (void*)memset((struct Binary_Tree_Type*)Pointer_Binary_Tree, 01 * sizeof(struct Binary_Tree_Type));
 
    Pointer_Binary_Tree->Header = (struct Parents_Node_Type_Of_Binary_Tree*malloc(1 * sizeof(struct Parents_Node_Type_Of_Binary_Tree));
    if ((struct Parents_Node_Type_Of_Binary_Tree*)Pointer_Binary_Tree->Header == NULL) {
 
        printf("Error! The dynamic memory allocation failed(2). Create_Binary_Tree()\n");
        free((struct Binary_Tree_Type*)Pointer_Binary_Tree);
 
        return NULL;
    }
    (void*)memset((struct Parents_Node_Type_Of_Binary_Tree*) Pointer_Binary_Tree->Header, 01 * sizeof(struct Parents_Node_Type_Of_Binary_Tree));
 
    return (struct Binary_Tree_Type*)Pointer_Binary_Tree;
}
 
int Insert_Binary_Tree_Element(struct Binary_Tree_Type* Pointer_Binary_Tree, struct Child_Node_Type_Of_Binary_Tree element) {
 
    if ((struct Binary_Tree_Type*)Pointer_Binary_Tree == NULL) {
 
        printf("Error! The binary tree was null. Insert_Binary_Tree_Element()\n");
        return FALSE;
    }
 
    struct Child_Node_Type_Of_Binary_Tree* Pointer_New_Node = (struct Child_Node_Type_Of_Binary_Tree*malloc(1 * sizeof(struct Child_Node_Type_Of_Binary_Tree));
    if ((struct Child_Node_Type_Of_Binary_Tree*)Pointer_New_Node == NULL) {
 
        printf("Error! The dynamic memory allocation failed. Inset_Binary_Tree_Element()\n");
        return FALSE;
    }
    (void*)memset((struct Child_Node_Type_Of_Binary_Tree*) Pointer_New_Node, 01 * sizeof(struct Child_Node_Type_Of_Binary_Tree));
 
    *Pointer_New_Node = *(struct Child_Node_Type_Of_Binary_Tree*&element;
 
    struct Parents_Node_Type_Of_Binary_Tree* Pointer_Header_Node = (struct Parents_Node_Type_Of_Binary_Tree*) Pointer_Binary_Tree->Header;
 
    // first inset
    if ((struct Parents_Node_Type_Of_Binary_Tree*)Pointer_Header_Node->Pointer_Root == NULL) {
 
        Pointer_Header_Node->Pointer_Root = (struct Child_Node_Type_Of_Binary_Tree*)Pointer_New_Node;
        Pointer_Binary_Tree->Number_Of_Current_Elements++;
 
        return TRUE;
    }
 
    // else insert
    struct Child_Node_Type_Of_Binary_Tree* Pointer_Current_Node = (struct Child_Node_Type_Of_Binary_Tree*) Pointer_Header_Node->Pointer_Root;
    while ((struct Child_Node_Type_Of_Binary_Tree*)Pointer_Current_Node != NULL) {
 
        // when less then the parents node
        if (Pointer_Current_Node->data > Pointer_New_Node->data) {
 
            if ((struct Child_Node_Type_Of_Binary_Tree*)Pointer_Current_Node->Pointer_Left_Child == NULLbreak;
            Pointer_Current_Node = (struct Child_Node_Type_Of_Binary_Tree*) Pointer_Current_Node->Pointer_Left_Child;
        }
        // when larger then the parents node
        else if (Pointer_Current_Node->data < Pointer_New_Node->data) {
 
            if ((struct Child_Node_Type_Of_Binary_Tree*)Pointer_Current_Node->Pointer_Right_Child == NULLbreak;
            Pointer_Current_Node = (struct Child_Node_Type_Of_Binary_Tree*)Pointer_Current_Node->Pointer_Right_Child;
        }
        // when inserting duplicate data
        else {
 
            printf("Error! Duplicate data cannot be inserted. Insert_Binary_Tree_Element()\n");
            free((struct Child_Node_Type_Of_Binary_Tree*)Pointer_New_Node);
 
            return FALSE;
        }
    }
 
    // when less then the parents node
    if (Pointer_Current_Node->data > Pointer_New_Node->data) {
 
        Pointer_Current_Node->Pointer_Left_Child = (struct Child_Node_Type_Of_Binary_Tree*) Pointer_New_Node;
    }
    // when larger then the parents node
    else if (Pointer_Current_Node->data < Pointer_New_Node->data) {
 
        Pointer_Current_Node->Pointer_Right_Child = (struct Child_Node_Type_Of_Binary_Tree*)Pointer_New_Node;
    }
    Pointer_Binary_Tree->Number_Of_Current_Elements++;
 
    return TRUE;
}
cs
"main.c"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "binary tree.h"
 
int main(int argc, char* argv[]) {
 
    typedef struct Binary_Tree_Type Binary_Tree;
    typedef struct Parents_Node_Type_Of_Binary_Tree Parents_Node;
    typedef struct Child_Node_Type_Of_Binary_Tree Child_Node;
 
    Binary_Tree* Pointer_Tree = (Binary_Tree*)Create_Binary_Tree();
    Child_Node node = { 0, };
 
    srand((unsigned)time(NULL));
 
    int loop = 0;
    for (loop = 0; loop < 10; loop++) {
 
        node.data = rand() % 30;
        Insert_Binary_Tree_Element((Binary_Tree*)Pointer_Tree, node);
    }
 
    system("pause");
 
    return 0;
}
cs

0 개의 댓글:

댓글 쓰기