#include <stdio.h> #include <stack> using namespace std; struct TNode { char data; TNode * lc; TNode *rc; bool flag; TNode () { data = '/0'; lc = rc = NULL; flag = false; } }; stack <TNode *> st; void creatTree(TNode *& root) { char ch = getchar(); if(!root) { if(ch !='$') { root = new TNode; root-> data = ch; creatTree(root->lc); creatTree(root->rc); } } } void preTraverse(TNode * root) { if(root) { putchar(root->data); if(root->lc) preTraverse(root->lc); if(root->rc) preTraverse(root->rc); } } void preTrv(TNode * root) { TNode * p = root; while(p || !st.empty()) { while(p) { putchar(p->data); st.push(p); p=p->lc; } if(!st.empty()) { p = st.top(); st.pop(); p = p->rc; } } } void midTrv(TNode *root) { TNode *p = root; while(p || !st.empty()) { while(p) { st.push(p); p=p->lc;//end the left child } if(!st.empty()) { p = st.top(); st.pop(); putchar(p->data); p = p->rc; } } } void postTrv(TNode *root) { TNode * p = root; while(p ||!st.empty()) { while(p) { st.push(p); p=p->lc; } if(!st.empty()) { p = st.top(); st.pop(); if(p->flag) { putchar(p->data); p = NULL; } else { p->flag = true; st.push(p); p = p->rc; } } } } void midTrv1(TNode *root) { if(root == NULL) return ; TNode *p = root; while(p || !st.empty()) { if(p) { st.push(p); p=p->lc; } else { p=st.top(); st.pop(); putchar(p->data); p=p->rc; } } } int main() { TNode * t=NULL; creatTree(t); postTrv(t); //preTraverse(t); }