240
笔下虽有千言,胸中实无一策

30 Day Challenge Day 3 | Leetcode 145. Binary Tree Postorder Traversal

题解

如果是刚做过 144. preorder traversal 的题,这道题不难延伸,虽然这是一道“hard”题。

postorder是“left ==> right ==> root”的遍历顺序,还是应用栈(stack)的数据结构,由于树的遍历必须是自上而下,也就是root必须在前面,不妨把问题转换乘“root ==> right ==> left”的顺序遍历,应用类似 144. preoder 的方法,就容易得到一个以这个顺序遍历的数据vector。只是要记得在函数返回前将这个vector倒序,这样就使得顺序变回原来的要求。

如果过程想象不清楚的话,画图手动实现一个例子是个比较好的方法去检验。

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> ret;
        stack<TreeNode*> s;

        if(!root) return ret;
        
        s.push(root);
        
        while(!s.empty()) {
            TreeNode* n = s.top();
            s.pop();
            
            ret.push_back(n->val);
            
            if(n->left) s.push(n->left);
            if(n->right) s.push(n->right);
        }
        
        reverse(ret.begin(), ret.end());
        
        return ret;
    }
};
posted @ 2020-08-18 04:26  CasperWin  阅读(81)  评论(0编辑  收藏  举报