## [144\. Binary Tree Preorder Traversal](https://leetcode.com/problems/binary-tree-preorder-traversal/) Given the `root` of a binary tree, return _the preorder traversal of its nodes' values_. **Example 1:** ![](https://assets.leetcode.com/uploads/2020/09/15/inorder_1.jpg) **Input:** root = \[1,null,2,3\] **Output:** \[1,2,3\] **Example 2:** **Input:** root = \[\] **Output:** \[\] **Example 3:** **Input:** root = \[1\] **Output:** \[1\] **Constraints:** - The number of 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> preorderTraversal(TreeNode* root) { dfs(root); return res; } void dfs(TreeNode* root) { if(!root) return; res.push_back(root->val); dfs(root->left); dfs(root->right); } }; ``` :::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> preorderTraversal(TreeNode* root) { // preorder: root -> left ->right vector<int> res; stack<TreeNode*> stk; stk.push(root); while(!stk.empty()) { TreeNode* node = stk.top(); stk.pop(); if(!node) continue; res.push_back(node->val); // 為了先處理左側,先 push 右側到 stack if(node->right) { stk.push(node->right); } // 利用 stack 的特性,最後再 push 左側 if(node->left) { stk.push(node->left); } } return res; } }; ``` :::success - 時間複雜度:$O(N)$ - 空間複雜度:$O(N)$ :::