1. 程式人生 > 實用技巧 >LeetCode 589. N叉樹的前序遍歷(前序遍歷的迭代實現)

LeetCode 589. N叉樹的前序遍歷(前序遍歷的迭代實現)


思考:由於前序遍歷的思路與深度優先搜尋類似,所以前序遍歷的迭代形式與深度優先搜尋的迭代形式類似。
而深度優先的過程與出棧入棧的過程很類似,我們就可以利用棧來完成深度優先搜尋的迭代
1.遞迴

class Solution {
public:
    vector<int> preorder(Node* root) {
        vector<int> tree;
        preorder(root,tree);
        return tree;
    }

    void preorder(Node*root , vector<int> &tree){
        if(root==NULL) return;
        else{
            tree.push_back(root->val);
        }
        for(int i = 0;i<root->children.size();i++){
            preorder(root->children[i],tree);
        }
        return;
    }
};

2.迭代

class Solution {
public:
    vector<int> preorder(Node* root) {
        vector<int> tree;
        stack<Node*> st;
        if(root!=NULL) st.push(root);
        while(st.empty()==false){
            Node* temp = st.top();
            st.pop();
            tree.push_back(temp->val);
            for(int i = temp->children.size()-1;i>=0;i--){
                st.push(temp->children[i]);//從最右結點往最左結點插入
            }
        }
        return tree;
    }
};