fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define sz(x) static_cast<int>((x).size())
  5. #define pb push_back
  6.  
  7. namespace BST {
  8.  
  9. struct Node {
  10. int value;
  11. int left, right;
  12. Node() : left(-1), right(-1) { }
  13. Node(int value) : value(value), left(-1), right(-1) { }
  14. };
  15.  
  16. vector<Node> m;
  17.  
  18. void init() {
  19. m.clear();
  20. }
  21.  
  22. int rec(int ind, int value) {
  23. if( ind == -1 ) {
  24. m.pb(Node(value));
  25. return sz(m)-1;
  26. }
  27. if( value < m[ind].value )
  28. m[ind].left = rec(m[ind].left, value);
  29. else
  30. m[ind].right = rec(m[ind].right, value);
  31. return ind;
  32. }
  33.  
  34. void push(int value) {
  35. if( m.empty() ) {
  36. m.pb(Node(value));
  37. } else {
  38. rec(0,value);
  39. }
  40. }
  41.  
  42. void print(int ind) {
  43. if( ind != -1 ) {
  44. print(m[ind].left);
  45. cout << m[ind].value << " ";
  46. print(m[ind].right);
  47. }
  48. }
  49.  
  50. void print() {
  51. print(0); cout << "\n";
  52. }
  53.  
  54. }
  55.  
  56. int main() {
  57.  
  58. int n;
  59. while( cin >> n ) {
  60. BST::init();
  61. while( n-- ) {
  62. int t; cin >> t; BST::push(t);
  63. }
  64. BST::print();
  65. }
  66.  
  67. return 0;
  68. }
Success #stdin #stdout 0s 3432KB
stdin
10
3 1 5 3 2 4 6 2 3 0
stdout
0 2 3 3 4 6