二叉树的后续遍历顺序为先左,后右,再根,我们可以反过来看,如果是先跟,后右,再左,那么和前序遍历,先跟后左,再右十分相似,前序遍历用到栈结构,先放右子树,再放左子树,那么我们可以先放左子树,再放右子树,先做成先根,后右,再左的方式,然后将其反过来(再用一个栈)就将这个问题解决
void houxu(Node *root)
{
stack<Node*> stk;
stack<int> res;
stk.push(root);
while (!stk.empty())
{
root = stk.top();
//cout << root->val << endl;
res.push(root->val);
stk.pop();
if (root->left)
{
stk.push(root->left);
}
if (root->right)
{
stk.push(root->right);
}
}
while (!res.empty())
{
cout << res.top() << " ";
res.pop();
}
}