#include <iostream> #include <stack> using namespace std; class TreeNode{ public: TreeNode(int v){val = v;}; int val; TreeNode* left; TreeNode* right; }; void prevOrder(TreeNode* root){ TreeNode* curr; stack<TreeNode*> s; curr = root; while(curr || !s.empty()){ while(curr){ cout<<curr->val<<endl; s.push(curr); curr = curr->left; } if(!s.empty()){ curr = s.top(); s.pop(); curr = curr->right; } } } void postOrder(TreeNode* root){ stack<TreeNode*> s; TreeNode* curr; TreeNode* lastPopedNode=NULL; s.push(root); while(!s.empty()){ curr = s.top(); TreeNode* lastChild = NULL; if(curr->left) lastChild = curr->left; if(curr->right) lastChild = curr->right; if(lastChild && lastPopedNode!=lastChild){ if(curr->right) s.push(curr->right); if(curr->left) s.push(curr->left); }else{ cout<<curr->val<<endl; s.pop(); lastPopedNode = curr; } } } TreeNode* constructTree(int* A, int l ,int r){ if(l>r) return NULL; int mid = (l+r)/2; TreeNode* root = new TreeNode(A[mid]); root->left = constructTree(A, l, mid-1); root->right = constructTree(A, mid+1, r); } int main(){ int A[] = {1,2,3,4}; int n = sizeof(A)/sizeof(int); TreeNode* root = constructTree(A, 0, n-1); postOrder(root); return 0; }