题目描述
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
解题思路:
- 定义一个辅助队列queue
- 先将根节点入队。
- 得到当前队列的大小n,则n就为当前层的节点数量。
- 把队列的n个节点依次出队,并打印出相应节点。每个出队的时候,就将出队的节点的左右节点分别入队。
- n个节点出队后,则该层遍历完成,打印换行符。
代码
void printFormTopToBottom1(TreeNode root){
if (root == null) {
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root); // 根节点入队
while (!queue.isEmpty()) {
// 打印当前一层的节点
int size = queue.size();
for (int i = 0; i < size; i++) {
// 从队里里拿出一个节点的时候,将这个节点的左右子树分别入队。
TreeNode tmp = queue.poll();
if (tmp.left != null) {
queue.offer(tmp.left);
}
if (tmp.right != null) {
queue.offer(tmp.right);
}
System.out.print(tmp.value);
}
System.out.println(); // 换行
}
}
网友评论