二叉树结构
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
后序递归
void PostOrder(TreeNode* root){
if(root){
PostOrder(root->left);
PostOrder(root->right);
visit(root);
}
}
后序非递归
void PostOrder(TreeNode* root){
stack<TreeNode*> S;
TreeNode *p = root, *r = NULL;
list<TreeNode*> L;
while(p || S.empty()){
if(p){
S.push(p);
p = p->left;
}
else{
p = S.top();
if(p->right != NULL && p->right != r){
p = p->right;
S.push(p);
p = p->left;
}
else{
S.pop();
visit(p);
r = p;
p = NULL;
}
}
}
}