题目
分析
方法一:利用队列实现广度优先搜索
我们要构造一个 sub-lists 列表,其中每个 sub-list 是树中一行的值。行应该按从上到下的顺序排列。
因为我们从根节点开始遍历树,然后向下搜索最接近根节点的节点,这是广度优先搜索。我们使用队列来进行广度优先搜索,队列具有先进先出的特性。
在这里使用栈是错误的选择,栈应用于深度优先搜索。
让我们在树上使用基于队列的遍历算法,看看它的作用。这是你应该记住的一个基本算法。
List values = new ArrayList<>();
Queue queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
Node nextNode = queue.remove();
values.add(nextNode.val);
for (Node child : nextNode.children) {
queue.add(child);
}
}
用一个列表存放节点值,队列存放节点。首先将根节点放到队列中,当队列不为空时,则在队列取出一个节点,并将其子节点添加到队列中。
让我们看看这个算法遍历树时我们得到了什么结果。