天天看點

LeetCode 144 Binary Tree Preorder Traversal(二叉樹的前序周遊)+(二叉樹、疊代)

版權聲明:轉載請聯系本人,感謝配合!本站位址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50931535

翻譯

給定一個二叉樹,傳回其前序周遊的節點的值。

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

另有兩道類似的題目:

LeetCode 94 Binary Tree Inorder Traversal(二叉樹的中序周遊)+(二叉樹、疊代) LeetCode 145 Binary Tree Postorder Traversal(二叉樹的後續周遊)+(二叉樹、疊代)

繼續閱讀