문제

링크

풀이

#include <iostream>
using namespace std;
 
typedef struct Node {
  char data;
  Node *left;
  Node *right;
} Node;
 
class BinaryTree {
private:
public:
  Node *root;
 
  Node *newNode(char data) {
    Node *node = new Node();
    node->data = data;
    node->left = nullptr;
    node->right = nullptr;
    return node;
  }
 
  BinaryTree(void) {
    root = newNode('A');
  }
 
  Node* search(Node* node, char data) {
    if (node == nullptr) return nullptr;
    if (node->data == data) return node;
 
    Node *left = search(node->left, data);
    if (left != nullptr) return left;
    Node *right = search(node->right, data);
    if (right != nullptr) return right;
    return nullptr;
  }
 
  void add(char root, char left, char right) {
    Node *rootNode = search(this->root, root);
    if (left != '.') rootNode->left = newNode(left);
    if (right != '.') rootNode->right = newNode(right);
  }
 
  void preorder(Node *node) {
    if (node == nullptr) return;
    cout << node->data;
    preorder(node->left);
    preorder(node->right);
  }
 
  void inorder(Node *node) {
    if (node == nullptr) return;
    inorder(node->left);
    cout << node->data;
    inorder(node->right);
  }
 
  void postorder(Node *node) {
    if (node == nullptr) return;
    postorder(node->left);
    postorder(node->right);
    cout << node->data;
  }
};
 
void solve(void) {
  int n;
  cin >> n;
  char root, left, right;
  BinaryTree tree;
  for (int i=0; i<n; i++) {
    cin >> root >> left >> right;
    tree.add(root, left, right);
  }
 
  tree.preorder(tree.root);
  cout << "\n";
  tree.inorder(tree.root);
  cout << "\n";
  tree.postorder(tree.root);
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}