1. 程式人生 > >LeetCode Week 6

LeetCode Week 6

144. Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes’ values.在這裡插入圖片描述

solutions:

本題意是要求不使用遞迴而是用迭代的方法輸出一顆二叉樹的前序遍歷。

對於前序遍歷,先訪問根節點,再訪問左子樹,最後訪問右子樹。
先訪問root節點,並將它和它的val分別加入stack和vector容器內。再將其設定為它的左子樹,並迭代下去直到它的左子樹為空(葉子節點)。
到達葉子節點後,對stack做取頂操作,再訪問它的右子樹。
直到stack為空時,迭代結束。

/**
 * 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> temp;
        stack<TreeNode *> s;
        TreeNode *p = root;
            while(p != NULL) {
                temp.push_back(p->val);
                s.push(p);
                p = p->left;
            }
            while(!s.empty()) {
                TreeNode *q = s.top();
                s.pop();
                q = q->right;
                while (q) {
				temp.push_back(q->val);
				s.push(q);
				q = q->left;
			}
        }
        return temp;
    }
};

在這裡插入圖片描述