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
}