Try   HackMD

144. Binary Tree Preorder Traversal

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

Example 1:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

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

/** * 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); } };
  • 時間複雜度:
    O(N)
  • 空間複雜度:
    O(N)

iteration

/** * 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; } };
  • 時間複雜度:
    O(N)
  • 空間複雜度:
    O(N)