Tree

Run Settings
LanguageC++
Language Version
Run Command
#include "stdafx.h" #include <iostream> using namespace std; const int N = 2; struct tree { int field[N]; tree *left; tree *middle; tree *right; }; void sort(int fd[N]) { int count; do { count = 0; for (int i = 0; fd[i + 1] != INT_MIN && i<N - 1; i++) if (fd[i]>fd[i + 1]) { swap(fd[i], fd[i + 1]); count++; } } while (count != 0); } tree *input(tree *head, int number) { int i; if (head == NULL) { head = new tree; head->field[0] = number; for (i = 1; i < N; i++) head->field[i] = INT_MIN; head->left = NULL; head->middle = NULL; head->right = NULL; } else { for (i = 0; head->field[i] != INT_MIN && i<N; i++); if (i != N) { head->field[i] = number; sort(head->field); } else { if (number <= head->field[0]) { head->left = input(head->left, number); } else if (number >= head->field[N - 1]) { head->right = input(head->right, number); } else if ((number >= head->field[0]) && (number <= head->field[N - 1])) { head->middle = input(head->middle, number); } /*if (number >= head->field[0] && number <= head->field[N - 1]) { int c = head->field[N - 1]; head->field[N - 1] = number; sort(head->field); head->right = input(head->right, c); return head; } else { if (number < head->field[0]) head->left = input(head->left, number); else head->right = input(head->right, number); }*/ } } return head; } void show(tree *head, int lvl) { int i; if (head != NULL) { for (i = 0; i < lvl; i++) cout << " "; for (int i = 0; i < N && head->field[i] != INT_MIN; i++) { cout << head->field[i] << " "; } cout << endl; if (head->left != NULL) cout << "(l) "; show(head->left, lvl + 1); if (head->middle != NULL) cout << "(m) "; show(head->middle, lvl + 1); if (head->right != NULL) cout << "(r) "; show(head->right, lvl + 1); } } void free(tree *head) { if (head != NULL) { free(head->left); free(head->middle); free(head->right); delete head; } } void main() { system("chcp 1251"); system("cls"); tree *head = NULL; int number = -1; int x; while (number != 0) { cout << "Введите 1, чтобы добавить число" << endl; cout << "Введите 2, чтобы вывести дерево" << endl; cout << "Введите 0, чтобы закончить работу" << endl; cin >> number; switch (number) { case 1: { cout << "Введите число" << endl; cin >> x; head = input(head, x); break; } case 2: { show(head, 0); break; } case 0: { free(head); break; } default: break; } } }
Editor Settings
Theme
Key bindings
Full width
Lines