1. 程式人生 > >LeetCode 144 Binary Tree Preorder Traversal(二叉樹的前序遍歷)+(二叉樹、迭代)

LeetCode 144 Binary Tree Preorder Traversal(二叉樹的前序遍歷)+(二叉樹、迭代)

翻譯

給定一個二叉樹,返回其前序遍歷的節點的值。

例如:
給定二叉樹為 {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
    /
   3
return [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; } };

另有兩道類似的題目: