본문 바로가기

[자료구조론] - Data Structure/[Concept]

Tree 구현

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
typedef int BData;
 
typedef struct _bTreeNode{
    BData item;
    struct _bTreeNode *left_child;
    struct _bTreeNode *right_child;
}BTreeNode;
 
int main(){
    BTreeNode *n1 = (BTreeNode*)malloc(sizeof(BTreeNode));
    BTreeNode *n2 = (BTreeNode*)malloc(sizeof(BTreeNode));
    BTreeNode *n3 = (BTreeNode*)malloc(sizeof(BTreeNode));
    
    n1->item = 10;
    n1->left_child = n2;
    n1->right_child = NULL;
 
    n2->item = 20;
    n2->left_child = n3;
    n2->right_child = NULL;
 
    n3->item = 30;
    n3->left_child = NULL;
    n3->right_child = NULL;
    
    free(n1),free(n2),free(n3);
    return 0;
}
cs

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
typedef int BData;
 
typedef struct _bTreeNode{
    BData item;
    struct _bTreeNode *left_child;
    struct _bTreeNode *right_child;
}BTreeNode;
 
BTreeNode* CreateNode(BData item){
    BTreeNode* node= (BTreeNode*)malloc(sizeof(BTreeNode));
    node->item = item;
    node->left_child = NULL;
    node->right_child = NULL;
 
    return node;
}
 
void DestoryNode(BTreeNode* node){
    free(node);
}
 
void CreateLeftSubtree(BTreeNode* root, BTreeNode* left){
    if(root->left_child !=NULL)
        exit(1);
    
    root->left_child = left;
}
 
void CreateRightSubtree(BTreeNode* root, BTreeNode* right){
    if(root->right_child != NULL)
        exit(1);
 
    root->right_child = right;
}
 
void Inorder(BTreeNode* root);
void Preorder(BTreeNode* root);
void Postorder(BTreeNode* root);
void Levelorder(BTreeNode* root);
 
int main(){
    BTreeNode* node1 = CreateNode(1);
    BTreeNode* node2 = CreateNode(2);
    BTreeNode* node3 = CreateNode(3);
    BTreeNode* node4 = CreateNode(4);
    BTreeNode* node5 = CreateNode(5);
    BTreeNode* node6 = CreateNode(6);
    
    CreateLeftSubtree(node1,node2);
    CreateRightSubtree(node1,node3);
 
    CreateLeftSubtree(node2,node4);
    CreateRightSubtree(node2,node5);
 
    CreateLeftSubtree(node3,node6);
    
    DestoryNode(node1);
    DestoryNode(node2);
    DestoryNode(node3);
    DestoryNode(node4);
    DestoryNode(node5);
    DestoryNode(node6);
    
    return 0;
}
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
int Node(BTreeNode * node){
    int r= 0, l = 0;
 
    if(node->right_child != NULL){
        r = Node(node->right_child);
    }
    if(node->left_child != NULL){
        l = Node(node->left_child);
    }
    return 1+r+l;
}
 
int Height(BTreeNode * node){
    int r= 0, l = 0;
 
    if(node->right_child != NULL){
        r = Height(node->right_child);
    }
    if(node->left_child != NULL){
        l = Height(node->left_child);
    }
    return 1+max(r,l);
}
cs

Property of Binary Tree

 

The height of Binary Tree is k.

-> Minimum # of nodes = k.

-> Maximum # of nodes = 2^k - 1

 

The # of nodes in a tree is n.

-> Minimum height = ceiling| lg(n+1) |

-> Maximum height = n

 

Rule of Array representation.

- parent node = floor| (i-1)/2 |

- left child = 2(i+1) - 1

- right child = 2(i+1)

 

'[자료구조론] - Data Structure > [Concept]' 카테고리의 다른 글

preOrder - CLR  (0) 2020.11.03
postOrder - LRC  (0) 2020.11.03
Questions regarding Data Structures  (0) 2020.10.19
Dynamic Queue (Using LinkedList)  (0) 2020.10.19
Dynamic Stack (Using Linked List)  (0) 2020.10.19