Binary Tree Postorder Traversal | Problem No. 145 | LeetCode

Given the root of a binary tree, return the postorder traversal of its nodes' values.

Example 1:

Input: root = [1,null,2,3] Output: [3,2,1] Example 2:

Input: root = [] Output: [] Example 3:

Input: root = [1] Output: [1] Example 4:

Input: root = [1,2] Output: [2,1] Example 5:

Input: root = [1,null,2] Output: [2,1]

Constraints:

The number of the nodes in the tree is in the range [0, 100]. -100 <= Node.val <= 100

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> res;
        stack<TreeNode *> s;
        TreeNode* node = root, *last = NULL, *temp_node;
        while(!s.empty() || node !=NULL){
            if(node!=NULL){
                s.push(node);
                node=node->left;
            }else{
                temp_node= s.top();
                if(temp_node->right && last!=temp_node->right ){
                    node=temp_node->right;
                }
                else{
                    s.pop();
                    last=temp_node;
                    res.push_back(temp_node->val);
                }
            }
        }
        return res;
    }
};