http://www.geeksforgeeks.org/print-ancestors-of-a-given-binary-tree-node-without-recursion/
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <queue> 5 #include <stack> 6 #include <string> 7 #include <fstream> 8 #include <map> 9 using namespace std; 10 11 struct node { 12 int data; 13 struct node *left, *right; 14 node() : data(0), left(NULL), right(NULL) { } 15 node(int d) : data(d), left(NULL), right(NULL) { } 16 }; 17 18 void printancestor(node *root, int key) { 19 if (!root) return; 20 stack<node*> S; 21 while (1) { 22 while (root && root->data != key) { 23 S.push(root); 24 root = root->left; 25 } 26 if (root && root->data == key) break; 27 if (S.top()->right == NULL) { 28 root = S.top(); 29 S.pop(); 30 while (!S.empty() && S.top()->right == root) { 31 root = S.top(); 32 S.pop(); 33 } 34 } 35 root = S.empty()? NULL : S.top()->right; 36 } 37 while (!S.empty()) { 38 cout << S.top()->data << " "; 39 S.pop(); 40 } 41 } 42 43 int main() { 44 node *root = new node(1); 45 root->left = new node(2); 46 root->right = new node(3); 47 root->left->left = new node(4); 48 root->left->right = new node(5); 49 root->right->left = new node(6); 50 root->right->right = new node(7); 51 root->left->left->left = new node(8); 52 root->left->right->right = new node(9); 53 root->right->right->left = new node(10); 54 for (int i = 1; i < 11; i++) { 55 printancestor(root, i); 56 cout << endl; 57 } 58 return 0; 59 }