fork(3) download
  1. #include<iostream>
  2. #include<stack>
  3. using namespace std;
  4.  
  5. class node{
  6. public:
  7. int value;
  8. node* left;
  9. node* right;
  10. node(int value)
  11. {
  12. this->value = value;
  13. left = NULL;
  14. right = NULL;
  15. }
  16. };
  17.  
  18. node* preorderToTree(int* a, int length)
  19. {
  20. if(length==0)
  21. return NULL;
  22. node* root = new node(a[0]);
  23. stack<node*> s;
  24. s.push(root);
  25. for(int i=1; i<length; i++)
  26. {
  27. node* tmp = new node(a[i]);
  28. if(tmp->value < s.top()->value)
  29. {
  30. s.top()->left = tmp;
  31. }
  32. else
  33. {
  34. node* popped = NULL;
  35. while(!s.empty() && tmp->value > s.top()->value)
  36. {
  37. popped = s.top();
  38. s.pop();
  39. }
  40. popped->right = tmp;
  41. }
  42. s.push(tmp);
  43. }
  44. return root;
  45. }
  46.  
  47. void inorder(node* root)
  48. {
  49. if(root)
  50. {
  51. inorder(root->left);
  52. cout<<root->value<<" ";
  53. inorder(root->right);
  54. }
  55. }
  56.  
  57. int main()
  58. {
  59. int a[] = {10, 8, 5, 2, 6, 7, 9, 20, 15, 25, 23};
  60. node* root = NULL;
  61. root = preorderToTree(a, sizeof(a)/sizeof(a[0]));
  62. inorder(root);
  63. }
Success #stdin #stdout 0.02s 2816KB
stdin
Standard input is empty
stdout
2 5 6 7 8 9 10 15 20 23 25