leetcode-589. N叉樹的前序遍歷刷題筆記(c++)

寫在前面

  • 好多文章連解釋的文字都沒有,,,
  • 刷題、所感所想

題目詳情

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

例如,給定一個 3叉樹 :
1
3	2	4
5	6	NULL	NULL	NULL	NULL
返回其前序遍歷: [1,3,5,6,2,4]。

ac代碼

  • 遞歸法
    • 遞歸左遍歷孩子集合,左孩子爲空則返回上1層遞歸
/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution
{
public:
    vector<int> res;
    vector<int> preorder(Node* root)
    {
        if(root == NULL)
            return res;
        else if(root != NULL)
        {
            res.push_back(root->val);
            for(Node* tp : root->children)
                preorder(tp);
        }
        return res;
    }
};
  • 堆棧迭代法
    • 注意孩子節點入棧的順序問題(倒序)
class Solution
{
public:
    vector<int> preorder(Node* root)
    {
        vector<int> ans;
        if(root == NULL)
            return ans;
        stack<Node*> s;
        Node *p;
        int psize = 0;
        s.push(root);
        while(!s.empty())
        {
            p = s.top();
            ans.push_back(p->val);
            psize = p->children.size();
            s.pop();
            while(psize)
                s.push(p->children[--psize]);
        }
        return ans;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章