標籤:
翻譯
給定一個二叉樹,返回其前序走訪的節點的值。例如:給定二叉樹為 {1,#, 2, 3} 1 2 / 3返回 [1, 2, 3]備忘:用遞迴是微不足道的,你可以用迭代來完成它嗎?
原文
Given a binary tree, return the preorder traversal of its nodes‘ values.For example:Given binary tree {1,#,2,3}, 1 2 / 3return [1,2,3].Note: Recursive solution is trivial, could you do it iteratively?
分析
題目讓咱試試迭代呢,不過還是先老老實實把遞迴給寫出來再說吧~
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> v; vector<int> preorderTraversal(TreeNode* root) { if (root != NULL) { v.push_back(root->val); preorderTraversal(root->left); preorderTraversal(root->right); } return v; }};
緊接著,咱來寫迭代的……
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {public: vector<int> preorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode*> tempStack; while (!tempStack.empty() || root != NULL) { if (root != NULL) { result.push_back(root->val); tempStack.push(root); root = root->left; } else { root = tempStack.top(); tempStack.pop(); root = root->right; } } return result; }};
144 Binary Tree Preorder Traversal(二叉樹的前序走訪)+(二叉樹、迭代)