LeetCode429-N叉树的层序遍历

题目链接

英文链接:https://leetcode.com/problems/delete-node-in-a-bst/

中文链接:https://leetcode-cn.com/problems/delete-node-in-a-bst/

题目详述

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

例如,给定一个 3叉树 :

返回其层序遍历:

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

说明:

  1. 树的深度不会超过 1000。
  2. 树的节点总数不会超过 5000。

题目详解

类似于 LeetCode102-二叉树的层次遍历,本题是N叉树的层序遍历。思路是一致的。

方法一:BFS。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class LeetCode_00429 {

public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
Deque<Node> queue = new ArrayDeque<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> level = new ArrayList<>(size);
while (size-- != 0) {
Node node = queue.poll();
level.add(node.val);
for (Node child : node.children) {
queue.offer(child);
}
}
res.add(level);
}
return res;
}

class Node {
public int val;
public List<Node> children;

public Node() {
}

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

方法二:DFS。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class LeetCode_00429 {

public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> res = new ArrayList<>();
dfs(root, 0, res);
return res;
}

private void dfs(Node root, int level, List<List<Integer>> res) {
if (root == null) {
return;
}
if (res.size() <= level) {
res.add(new ArrayList<>());
}
res.get(level++).add(root.val);
for (Node child : root.children) {
dfs(child, level, res);
}
}

class Node {
public int val;
public List<Node> children;

public Node() {
}

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