【LeetCode】590. N叉树的后序遍历

解题思路:

给定一个 N 叉树,返回其节点值的后序遍历。

例如,给定一个 3叉树 :

在这里插入图片描述

返回其后序遍历: [5,6,3,2,4,1].

说明: 递归法很简单,你可以使用迭代法完成此题吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

递归写法

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
class Solution {
    
    
    public List<Integer> postorder(Node root) {
    
    
        List<Integer> arr = new ArrayList<>();
        traverse(root, arr);
        return arr;
    }
    public void traverse(Node root, List<Integer> arr) {
    
    
        if (root == null) return;
        for (Node child : root.children) {
    
    
            traverse(child, arr);
        }
        arr.add(root.val);
    }
}

迭代写法

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
class Solution {
    
    
    public List<Integer> postorder(Node root) {
    
    
        LinkedList<Node> stack = new LinkedList<>();
        LinkedList<Integer> arr = new LinkedList<>();
        if (root == null) return arr;
        stack.add(root);
        while (!stack.isEmpty()) {
    
    
            Node node = stack.pollLast();
            arr.addFirst(node.val);
            for (Node child : node.children) {
    
    
                if (child != null) {
    
    
                    stack.add(child);
                }
            }
        }
        return arr;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43356538/article/details/113839308
今日推荐