二叉树的另一种后续遍历
二叉树的后序遍历为 左右根,困难点在于必须要左右访问完了才能访问根,所以不能像前序或者中序那样一路向左,我们可以换一个思维,即左右根的遍历正好与根右左的遍历是逆序的关系,所以我们可以模仿前中序的遍历,一路向右,然后逆序输出
void postTraversal(Node* root){
stack<char> res; //保存结果
stack<Node*> sta; //暂存带扩展的左节点
Node* temp=root;
while(!sta.empty() || temp!=NULL){
if(temp!=NULL){
res.push(temp->ch);
sta.push(temp);
temp=temp->right; //一路向右
}else{ //到达叶子
temp=sta.top()->left; //处理最近的左节点
sta.pop(); //父节点的左右根都处理完毕,出栈
}
}
while(!res.empty()){
cout<<res.top();
res.pop();
}
cout<<endl;
}