0589. N Ary Tree Preorder Traversal

589. N叉树的前序遍历 #

Difficulty: 简单

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

例如,给定一个 3叉树 :

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

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

题解 #

解法一:递归求解 #

/*
// 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> result = new ArrayList<>();
        helper(root, result);
        return result;
    }

    private void helper(Node node, List<Integer> result) {
        if (node == null) {
            return;
        }
        result.add(node.val);
        for (Node n : node.children) {
            helper(n, result);
        }
    }
}

解法二:Stack 数据结构 #

/*
// 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> result = new ArrayList<>();
        if (root == null) {
            return result;
        }
        Stack<Node> stack = new Stack<Node>();
        stack.add(root);
        while(!stack.isEmpty()) {
            Node n = stack.pop();
            result.add(n.val);
            Collections.reverse(n.children);
            for (Node item : n.children) {
                stack.add(item);
            }
        }
        return result;
    }
}

解法三:使用 Queue 模拟 Stack #

/*
// 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> result = new ArrayList<>();
        if (root == null) {
            return result;
        }
        Deque<Node> stack = new LinkedList<Node>();
        stack.add(root);
        while(!stack.isEmpty()) {
            Node n = stack.pollLast();
            result.add(n.val);
            Collections.reverse(n.children);
            for (Node item : n.children) {
                stack.add(item);
            }
        }
        return result;
    }
}
Calendar Nov 29, 2020
Edit Edit this page
本站总访问量:  次 您是本站第  位访问者