http://www.geeksforgeeks.org/level-order-traversal-in-spiral-form/
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <queue> 5 #include <stack> 6 using namespace std; 7 8 struct node { 9 int data; 10 struct node *left, * right; 11 node() : data( 0 ), left(NULL), right(NULL) { } 12 node( int d) : data(d), left(NULL), right(NULL) { } 13 }; 14 15 void print(node * node) { 16 if (!node) return ; 17 print(node-> left); 18 cout << node->data << " " ; 19 print(node-> right); 20 } 21 22 void printspiral(node* root) { 23 if (!root) return ; 24 bool flag = true ; 25 stack<node*> S, T; 26 S.push(root); 27 while (! S.empty()) { 28 while (! S.empty()) { 29 node *top = S.top(); 30 S.pop(); 31 cout << top->data << " " ; 32 if (! flag) { 33 if (top->left) T.push(top-> left); 34 if (top->right) T.push(top-> right); 35 } 36 else { 37 if (top->right) T.push(top-> right); 38 if (top->left) T.push(top-> left); 39 } 40 } 41 swap(S, T); 42 flag = ! flag; 43 } 44 } 45 46 47 int main() { 48 struct node* root = new node( 1 ); 49 root->left = new node( 2 ); 50 root->right = new node( 3 ); 51 root->left->left = new node( 7 ); 52 root->left->right = new node( 6 ); 53 root->right->left = new node( 5 ); 54 root->right->right = new node( 4 ); 55 printspiral(root); 56 return 0 ; 57 }
Data Structure Binary Tree: Level order traversal in spiral form