LeetCode589.N叉树的前序遍历

 题目来源:

https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/

题目描述: 

LeetCode589.N叉树的前序遍历

递归法: 先输出当前节点的值,再从左孩子到右孩子进行递归

/*
class Node {
    public int val;
    public List<Node> children;
    public Node() {}
    public Node(int _val,List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
class Solution {

    List<Integer> list = new ArrayList();

    public List<Integer> preorder(Node root) {
        if (root != null) {
            list.add(root.val);
            for (Node node : root.children) {
                preorder(node);
            }
        }
        return list;
    }
}

迭代法:

迭代法用栈来存节点,依次取栈顶节点的数据并出栈。要注意的是,此时存孩子节点的顺序应该从右到左,因为先进后出。

/*
class Node {
    public int val;
    public List<Node> children;
    public Node() {}
    public Node(int _val,List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
class Solution {
    public List<Integer> preorder(Node root) {
        List<Integer> list = new ArrayList<>();
        Stack<Node> stack = new Stack<>();
        if (root!=null){
            stack.push(root);
            while (!stack.empty()){
                Node node = stack.pop();
                list.add(node.val);
                for(int i=node.children.size()-1;i>-1;i--){
                    stack.push(node.children.get(i));
                }
            }
        }
        return list;
    }
}