二叉树的后续遍历(左->右->根)
void postorderTraversal(TreeNode* root) {
if(root==NULL){
return ;
}
stack<TreeNode *> sts;
map<TreeNode *,bool> maps;//记录是第几次访问
TreeNode * p=root;
while(!sts.empty() || p){
while(p){
sts.push(p);
maps[p]=false;
p=p->left;
}
if(!sts.empty()){
TreeNode * temp=sts.top();
if(maps[temp]==false){ //如果只访问过一次,则先访问其右子树,顺便设为访问过两次
maps[temp]=true;
p=temp->right;
}else{ //如果访问过两次,则出栈,并打印。
res.push_back(temp->val);
sts.pop();
}
}
}
return ;
}