LeetCode429. N叉树的层序遍历(java)

1. 问题

给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。

例如,给定一个 3叉树 :
LeetCode429. N叉树的层序遍历(java)_第1张图片
返回其层序遍历:

[
     [1],
     [3,2,4],
     [5,6]
]

2.解法

宽度优先搜索 BFS

/*
// Definition for a Node.
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<List<Integer>> levelOrder(Node root) {
        Queue<Node> queue = new LinkedList<>() ;
        List<List<Integer>> res = new LinkedList<List<Integer>>();
       
        if(root == null) return res;
        queue.add(root);
        while(!queue.isEmpty()){
            int count = queue.size();
            List<Integer> childRes = new LinkedList<>();
            while(count-- > 0){
                Node tmpNode = queue.poll();
                childRes.add(tmpNode.val);
                for(int i = 0; i < tmpNode.children.size(); i++){
                    queue.add(tmpNode.children.get(i));
                }
            }
            res.add(childRes);
        }
        return res;
    }
}

方法二: DFS

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> nodeList = new ArrayList<>();
        recurse(root, 0, nodeList);
        
        return nodeList;
    }
    
    private void recurse(Node node, int h, List<List<Integer>> nodeList) {
        if (node == null) {
            return;
        }
        
        if (h == nodeList.size()) {
            nodeList.add(new ArrayList<>());
        }
        
        nodeList.get(h).add(node.val);
        if (node.children.size() > 0) {
            for (Node sub : node.children) {
                recurse(sub, h + 1, nodeList);
            }
        }
    }
}

你可能感兴趣的:(LeetCode)