fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4.  
  5.  
  6. struct node{
  7. int data;
  8. node* left;
  9. node* right;
  10. };
  11.  
  12. node* newNode(int k)
  13. {
  14. node* temp = new node;
  15. temp->data = k;
  16. temp->right = NULL;
  17. temp->left = NULL;
  18. return temp;
  19. }
  20.  
  21. void modifiedLevelOrder(node* root)
  22. {
  23. if(root == NULL)
  24. return;
  25. if (root->left == NULL && root->right == NULL) {
  26. cout << root->data;
  27. return;
  28. }
  29. queue<node*> q;
  30. stack<node*> s;
  31. q.push(root);
  32.  
  33. int size = 0;
  34. bool RightToLeft = false;
  35. int ct = 0;
  36.  
  37. while(!q.empty())
  38. {
  39. ct++;
  40. size = q.size();
  41. int count = 0;
  42. while(count < size)
  43. {
  44. node* temp = q.front();
  45. q.pop();
  46. if(temp->left)
  47. {
  48. q.push(temp->left);
  49. }
  50. if(temp->right)
  51. {
  52. q.push(temp->right);
  53. }
  54.  
  55. if(RightToLeft == false)
  56. {
  57. cout << temp->data << " ";
  58.  
  59. }
  60. else
  61. {
  62. s.push(temp);
  63. }
  64. count++;
  65. }
  66.  
  67.  
  68. if(RightToLeft)
  69. {
  70. while(!s.empty())
  71. {
  72. node* temps;
  73. temps = s.top();
  74.  
  75. cout << temps->data << " ";
  76. s.pop();
  77. }
  78.  
  79. }
  80.  
  81.  
  82.  
  83. if(ct == 2)
  84. {
  85. RightToLeft = ! RightToLeft;
  86. ct = 0;
  87. }
  88. cout << endl;
  89.  
  90.  
  91.  
  92.  
  93. }
  94. }
  95.  
  96.  
  97.  
  98. int main()
  99. {
  100. // Let us create binary tree
  101. node* root = newNode(1);
  102. root->left = newNode(2);
  103. root->right = newNode(3);
  104. root->left->left = newNode(4);
  105. root->left->right = newNode(5);
  106. root->right->left = newNode(6);
  107. root->right->right = newNode(7);
  108. root->left->left->left = newNode(8);
  109. root->left->left->right = newNode(9);
  110. root->left->right->left = newNode(3);
  111. root->left->right->right = newNode(1);
  112. root->right->left->left = newNode(4);
  113. root->right->left->right = newNode(2);
  114. root->right->right->left = newNode(7);
  115. root->right->right->right = newNode(2);
  116. root->left->right->left->left = newNode(16);
  117. root->left->right->left->right = newNode(17);
  118. root->right->left->right->left = newNode(18);
  119. root->right->right->left->right = newNode(19);
  120.  
  121. //levelorder(root);
  122.  
  123.  
  124. modifiedLevelOrder(root);
  125.  
  126. return 0;
  127. }
Success #stdin #stdout 0s 4576KB
stdin
Standard input is empty
stdout
1 
2 3 
7 6 5 4 
2 7 2 4 1 3 9 8 
16 17 18 19