Given a binary tree, return the preorder traversal of its nodes’ values.
Example:
Input:[1,null,2,3]
1 \ 2 / 3 Output:[1,2,3]
Follow up: Recursive solution is trivial, could you do it iteratively?
Solution 1: Recursion
Time complexity: O(n)
Space complexity: O(n)
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Author: Huahua class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ans; function<void(TreeNode*)> preorder = [&](TreeNode* n) { if (!n) return; ans.push_back(n->val); preorder(n->left); preorder(n->right); }; preorder(root); return ans; } }; |
Solution 2: Stack
Time complexity: O(n)
Space complexity: O(n)
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Author: Huahua class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ans; stack<TreeNode*> s; if (root) s.push(root); while (!s.empty()) { TreeNode* n = s.top(); ans.push_back(n->val); s.pop(); if (n->right) s.push(n->right); if (n->left) s.push(n->left); } return ans; } |
请尊重作者的劳动成果,转载请注明出处!花花保留对文章/视频的所有权利。
如果您喜欢这篇文章/视频,欢迎您捐赠花花。
If you like my articles / videos, donations are welcome.
Be First to Comment