码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 590 N叉树的后序遍历

时间:2020-07-16 21:39:10      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:ems   题目   ret   www   ref   root   html   迭代   empty   

题目链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal/

方法一递归法:先访问子节点,然后访问根。LeetCode代码:

/*
// 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> postorder(Node* root) {
        if(root){
            int len=root->children.size();
            for(int i=0;i<len;++i){
                postorder(root->children[i]);
            }
            res.push_back(root->val);
        }
        return res;
    }
};

方法二:迭代法,思想类似于二叉树后续遍历的迭代法,将后序遍历转换类似前序遍历的遍历,与前序遍历不同的是是先访问根然后迭代访问根最右边节点,然后为右边的左边的一个节点,一直到访问完

最左边节点为止。然后反向输出,类似于二叉树的后序遍历的迭代法。二叉树的后序遍历可参考https://www.cnblogs.com/zzw-/p/13296052.html 。 此题 LeetCode代码如下:

vector<int>res;
        if(!root){
            return res;
        }
        stack<Node*>S;
        S.push(root);
        int len;
        while(!S.empty()){
           root=S.top();
           res.push_back(root->val); 
           S.pop();
           len=root->children.size();
           for(int i=0;i<len;++i){
               S.push(root->children[i]);
           }
           
        }
        len=res.size();
       
        int temp;
        for(int i=0;i<len/2;++i){
            temp=res[i];
            res[i]=res[len-i-1];
            res[len-i-1]=temp;
        }
        return res;
    }

 

LeetCode 590 N叉树的后序遍历

标签:ems   题目   ret   www   ref   root   html   迭代   empty   

原文地址:https://www.cnblogs.com/zzw-/p/13324545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!