## [145\. Binary Tree Postorder Traversal](https://leetcode.com/problems/binary-tree-postorder-traversal/) Given the `root` of a binary tree, return _the postorder traversal of its nodes' values_. **Example 1:** ![](https://assets.leetcode.com/uploads/2020/08/28/pre1.jpg) **Input:** root = \[1,null,2,3\] **Output:** \[3,2,1\] **Example 2:** **Input:** root = \[\] **Output:** \[\] **Example 3:** **Input:** root = \[1\] **Output:** \[1\] **Constraints:** - The number of the nodes in the tree is in the range `[0, 100]`. - `-100 <= Node.val <= 100` **Follow up:** Recursive solution is trivial, could you do it iteratively? recursion ```cpp= /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { private: vector<int> res; public: vector<int> postorderTraversal(TreeNode* root) { dfs(root); return res; } void dfs(TreeNode* root) { if(!root) return; dfs(root->left); dfs(root->right); res.push_back(root->val); } }; ``` :::success - 時間複雜度:$O(N)$ - 空間複雜度:$O(N)$ ::: iteration ```cpp= /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<int> postorderTraversal(TreeNode* root) { vector<int> res; if(!root) return res; stack<TreeNode*> stk; stk.push(root); while (!stk.empty()) { TreeNode* node = stk.top(); stk.pop(); res.push_back(node->val); if(node->left) { stk.push(node->left); } if(node->right) { stk.push(node->right); } } reverse(res.begin(), res.end()); return res; } }; ``` :::success - 時間複雜度:$O(N)$ - 空間複雜度:$O(N)$ :::