题目
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
思路
其实挺简单的,就是用一个队列,然后,判断根节点是否为空。不为空就继续,为空就返回空列表。然后,获取当前节点,每次都要取出当前队列的数值,并定为一个定值。然后取出来,把数值压入到临时列表中,并把子节点存放到队列中。
代码
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null)
return ans;
Deque<Node> deque = new LinkedList<>();
deque.add(root);
while (!deque.isEmpty()) {
int size = deque.size(); //取出当前这一层的节点数
List<Integer> temp_list = new ArrayList<>(); //当前同层节点的数值存放的列表
for (int i=0;i<size;++i)
{
Node temp_node = deque.poll();
temp_list.add(temp_node.val); //将当前层的节点的数值存放在列表中
if (temp_node.children!=null) //如果当前层的节点的子节点不为空
deque.addAll(temp_node.children); //将当前节点的子节点全部压入队列中
}
ans.add(temp_list);
}
return ans;
}
}