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;
    }
};
原文地址:https://www.cnblogs.com/shuibeng/p/13625862.html