Data Structure Binary Tree: Print ancestors of a given binary tree node without recursion

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 }

 

你可能感兴趣的:(binary)