Binary Tree Postorder Traversal

递归方法:

class Solution {
public:
    void _postorderTraversal(TreeNode* root,vector<int>& postorder)
    {
        if(root)
        {
            _postorderTraversal(root->left,postorder);
            _postorderTraversal(root->right,postorder);
            postorder.push_back(root->val);
        }
        
    }
    
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> postorder;
        _postorderTraversal(root,postorder);
        return postorder;
    }
};

非递归:

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> postorder;
        if(!root)
            return postorder;
        
        stack<pair<TreeNode*,int>> s;
        s.push(make_pair(root,0));
        while(!s.empty())
        {
            TreeNode* p=s.top().first;
            int time=s.top().second;
            s.pop();
            if(!time)
            {
                s.push(make_pair(p,1));
                if(p->right)
                    s.push(make_pair(p->right,0));
                if(p->left)
                    s.push(make_pair(p->left,0));
            }
            else
                postorder.push_back(p->val);
        }
        
        return postorder;
    }
};

 

posted on 2016-04-15 10:52  summerkiki  阅读(140)  评论(0编辑  收藏  举报