#include #include #include #include #include using namespace std; struct node { string data; node * left, * right; node(string s) { data = s; left = NULL; right = NULL; } void enumerate(vector & v) { if (this == NULL) return; left->enumerate(v); v.push_back(data); right->enumerate(v); } }; class tree { protected: node * root; public: tree() { root = NULL; } void insert(string x) { if (root == NULL) { root = new node(x); return; } node * ptr = root, * prev = NULL; while (true) { if (x < ptr->data) { prev = ptr; ptr = ptr->left; if (ptr == NULL) { prev->left = new node(x); break; } } else { prev = ptr; ptr = ptr->right; if (ptr == NULL) { prev->right = new node(x); break; } } } } void enumerate(vector & v) { root->enumerate(v); } }; int random_in_range(int a, int b) { return a + random() % (b - a + 1); } string randomstring() { int len = random_in_range(3, 7); string s = ""; for (int i = 0; i < len; i += 1) s += (char)random_in_range('A', 'Z'); return s; } void something(vector & v) { tree T; for (int i = 0; i < v.size(); i += 1) T.insert(v[i]); v.clear(); T.enumerate(v); } int main(int argc, char * argv[]) { srandomdev(); if (argc != 2) { cerr << "Give me a number!\n"; exit(1); } int N = atoi(argv[1]); vector v; for (int i = 0; i < N; i += 1) { string s = randomstring(); v.push_back(s); } something(v); for (int i = 0; i < N; i += 1) cout << v[i] << " "; }