层序遍历
层序遍历是二叉树中很重要的一个问题。
BFS要借助队列来完成,先把根元素加入队列。对队列进行非空循环,对节点的左右子节点进行判断,如果存在就加入队列。每次循环将出队的元素作为新的根节点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public static void cenciTraverseWithQueue(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); System.out.println(node.val); if (root.leftNode != null) { queue.offer(node.leftNode); } if (root.rightNode != null) { queue.offer(node.rightNode); } } }
|
借助两个数组完成:
cur:保存当前层的节点
next:保存下一层的节点
遍历cur中所有的节点,将节点的子节点加入next中。遍历完后将cur替换成next数组。循环退出的条件是cur为空。
Java:
1 2 3 4 5 6 7 8
| List.of()
cur.isEmpty()
List<Integer> vals = new ArrayList<>(cur.size());
for (TreeNode node : cur){}
|