【LeetCode】589. N叉树的前序遍历

题目描述:

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

例如,给定一个 3叉树 :

在这里插入图片描述

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-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> preorder(Node root) {
    
    
        List<Integer> list = new ArrayList<>();
        traverse(root, list);
        return list;
    }
    
    public void traverse(Node root, List<Integer> list) {
    
    
        if (root == null) return;
        list.add(root.val);
        for (Node child : root.children) {
    
    
            traverse(child, list);
        }
    }
}

迭代法

/*
// 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> preorder(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.add(node.val);
            Collections.reverse(node.children);
            for (Node child : node.children) {
    
    
                stack.add(child);
            }
        }
        return arr;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43356538/article/details/113840195