Given an n-ary tree, return the postorder traversal of its nodes' values.

Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).

 

Follow up:

Recursive solution is trivial, could you do it iteratively?

 

Example 1:

Input: root = [1,null,3,2,4,null,5,6]
Output: [5,6,3,2,4,1]

Example 2:

Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
Output: [2,6,14,11,7,3,12,8,4,13,9,10,5,1]

 

Constraints:

  • The height of the n-ary tree is less than or equal to 1000
  • The total number of nodes is between [0, 10^4]
Accepted
61,115
Submissions
87,988
 
 
递归版本
class Solution {
public:
    vector<int> postorder(Node* root) {
        vector<int> res;
        postorder(root,res);
        return res;
    }
    void postorder(Node *root, vector<int> &res)
    {
        if(NULL==root)return;
        for(Node *n:root->children)
            postorder(n,res);
        res.push_back(root->val);
    }
};

 

循环版本

root放入数组,然后取出数组末尾元素,把所有子节点插入数组,root值保存到结果中,所以这样得到的结果其实是反的,所以最后要用reverse

class Solution {
public:
    vector<int> postorder(Node* root) {
        vector<int> res;
        vector<Node*> node;
        if(root)node.push_back(root);
        while(!node.empty())
        {
            Node *p=node.back();
            node.pop_back();
            for(Node *n:p->children)
                node.push_back(n);
            res.push_back(p->val);
        }
        reverse(res.begin(),res.end());
        return res;
    }
};