#include<iostream> #include "stack" using namespace std; struct node{ char c; node* left; node *right; bool flag; }; void pre(node* head){//非递归前序遍历 stack<node*> s; while (head || !s.empty()){ if (head){ cout << head->c; s.push(head); head = head->left; } else{ head = s.top()->right; s.pop(); } } } void middle(node* head){//非递归中序遍历 stack<node*> s; node* p; while (head || !s.empty()){ if (head){ s.push(head); head = head->left; } else{ p = s.top(); cout << p->c; s.pop(); head = p->right; } } } void post(node* head){//非递归后序遍历 node* p; stack<node*> s; while (head || !s.empty()){ if (head){ s.push(head); head = head->left; } else{ p = s.top(); if (p->flag){ cout << p->c; s.pop(); } else{ head = p->right; p->flag = true;//代表右子树已经访问过 } } } } int main(int argc, char **argv) { node f = { 'f', 0, 0, false }; node e = { 'e', &f, 0, false }; node d = { 'd', 0, 0, false }; node b = { 'b', &d, &e, false }; node g = { 'g', 0, 0, false }; node c = { 'c', 0, &g, false }; node a = { 'a', &b, &c, false }; pre(&a); cout << endl; middle(&a); cout << endl; post(&a); }