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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章