//借助了先序非递归的方法,第一个循环就是对先序的改写了
//先序遍历时,弹出栈顶节点就访问,然后先压右孩子再压左孩子,循环直到栈空
//改写如下:
//如果每次弹出栈顶元素就访问,并且先压左孩子再压右孩子,那么整体的访问顺序就是头右左;而后续遍历的顺序是啥?
//不就是左右头嘛?和头右左是逆序的,那我们在每次弹出栈顶元素不访问,将它压入另一个栈,另一个栈的顺序就是后续遍历了
class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        stack<TreeNode*> s1,s2;
        vector<int> v;
        if(root==nullptr) return v;
        s1.push(root);
	  //先序遍历改写
        while(!s1.empty())
        {
            TreeNode* t = s1.top();
            s1.pop();
            s2.push(t);//弹出不访问,压入s2
            if(t->left)//先压入左
                s1.push(t->left);
            if(t->right)//再压入右
                s1.push(t->right);
        }
        while(!s2.empty())//访问s2
        {
            v.push_back(s2.top()->val);
            s2.pop();
        }
        return v;
    }
};