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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #include <stdio.h> #include <stdlib.h> typedef int Element; class Node { public: int id; Element elem; Node* left; Node* right; Node() : Node(0, 0, nullptr, nullptr) {}; Node(int id, Element elem) : Node(id, elem, nullptr, nullptr) {}; Node(int id, Element elem, Node* left, Node* right) : id(id), elem(elem), left(left), right(right) {} virtual ~Node() { printf("Node %d Deleted \n", id); delete left; delete right; } void preorder() { printf(" %d", elem); if (left) left->preorder(); if (right) right->preorder(); } void inorder() { if (left) left->preorder(); printf(" %d", elem); if (right) right->preorder(); } void postorder() { if (left) left->preorder(); if (right) right->preorder(); printf(" %d", elem); } Node* search_child(int id) { if (this->id == id) return this; Node* node = nullptr; if (left != nullptr) node = left->search_child(id); if (node == nullptr && right != nullptr) node = right->search_child(id); return node; } }; Node* mirror_tree(Node* node) { Node* left = nullptr; if (node->right) left = mirror_tree(node->right); Node* r = nullptr; if (node->left) r = mirror_tree(node->left); return new Node(node->id, node->elem, left, r); } int main() { // init tree (bottom-to-top) const int NODE_LEN = 6; Node* node[NODE_LEN]; for (int i = 0; i < NODE_LEN; i++) node[i] = nullptr; node[4] = new Node(4, 4); node[5] = new Node(5, 5); node[2] = new Node(2, 2); node[3] = new Node(3, 3, node[4], node[5]); node[1] = new Node(1, 1, node[2], node[3]); Node* root = node[1]; // test preorder() printf("preorder : "); root->preorder(); printf("\n"); // test preorder() of mirror_tree Node* mirror_root = mirror_tree(root); printf("preorder : "); mirror_root->preorder(); printf("\n"); // test search_child() Node* child = nullptr; child = root->search_child(2); if (child != nullptr) printf("id : %d \n", child->id); else printf("id : null \n"); child = root->search_child(5); if (child != nullptr) printf("id : %d \n", child->id); else printf("id : null \n"); child = root->search_child(6); if (child != nullptr) printf("id : %d \n", child->id); else printf("id : null \n"); printf("Delete original tree \n"); delete root; printf("Delete mirror_tree \n"); delete mirror_root; return 0; } /* original tree : 1 2 3 4 5 preorder : 12345 mirror_tree : 1 3 2 5 4 preorder : 13542 */ | cs |
'Algorithm' 카테고리의 다른 글
백준 알고리즘 10250번 : ACM 호텔 (0) | 2021.02.15 |
---|---|
백준 알고리즘 14681번 : 사분면 고르기 (0) | 2021.02.15 |
알고리즘 문제 해결 전략 - 사탕 나눠주기 문제 (1) | 2019.03.27 |
[BOJ] 백준 알고리즘 9095번 정답 코드 (0) | 2018.04.23 |
[Algorithm] 코드 읽기 (0) | 2018.04.01 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/