参考http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html 的5楼回复
#include <iostream>
#include <stack>
using namespace std;
struct Node {
int data;
Node *left;
Node *right;
Node(int d, Node *l = NULL, Node *r = NULL){
data = d;
left = l;
right = r;
}
};
void preOrder(Node *root){
if (!root)
return;
stack<Node *> s;
s.push(root);
while (!s.empty()) {
Node *p = s.top();
s.pop();
cout << p->data << '\t';
if (p->right != NULL)
s.push(p->right);
if (p->left != NULL)
s.push(p->left);
}
}
void inOrder(Node *root){
if (!root)
return;
stack<pair<Node *, bool> > s;
s.push(make_pair(root, false));
while (!s.empty()) {
Node *p = s.top().first;
bool flag = s.top().second;
s.pop();
if (!flag) {
if (p->right != NULL)
s.push(make_pair(p->right, false));
s.push(make_pair(p, true));
if (p->left != NULL)
s.push(make_pair(p->left, false));
}
else {
cout << p->data << '\t';
}
}
}
void postOrder(Node *root)
{
if (!root)
return;
stack<pair<Node *, bool> > s;
s.push(make_pair(root, false));
while (!s.empty()) {
Node *p = s.top().first;
bool flag = s.top().second;
s.pop();
if (!flag) {
s.push(make_pair(p, true));
if (p->right != NULL)
s.push(make_pair(p->right, false));
if (p->left != NULL)
s.push(make_pair(p->left, false));
}
else {
cout << p->data << '\t';
}
}
}
int main()
{
Node *tmp;
Node *root = new Node(1);
tmp = new Node(2);
root->left = tmp;
tmp = new Node(3);
root->right = tmp;
tmp = new Node(4);
root->left->left = tmp;
tmp = new Node(5);
root->left->right = tmp;
tmp = new Node(6);
root->left->right->left = tmp;
tmp = new Node(7);
root->left->right->right = tmp;
preOrder(root);
cout << endl;
inOrder(root);
cout << endl;
postOrder(root);
cout << endl;
int ttt = 0;
return 0;
}