题解 | #二叉树的后序遍历#

二叉树的后序遍历

https://www.nowcoder.com/practice/1291064f4d5d4bdeaefbf0dd47d78541

//借助了先序非递归的方法,第一个循环就是对先序的改写了
//先序遍历时,弹出栈顶节点就访问,然后先压右孩子再压左孩子,循环直到栈空
//改写如下:
//如果每次弹出栈顶元素就访问,并且先压左孩子再压右孩子,那么整体的访问顺序就是头右左;而后续遍历的顺序是啥?
//不就是左右头嘛?和头右左是逆序的,那我们在每次弹出栈顶元素不访问,将它压入另一个栈,另一个栈的顺序就是后续遍历了
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;
    }
};

全部评论

相关推荐

04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
05-16 09:20
已编辑
中国民航大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务