题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。实际上就是二叉树的层序遍历。这个很经典的题目,层序遍历的话用队列,不熟悉的同学可以去复习一下遍历的七种方法:
- 递归先序
- 递归中序
- 递归后序
- 非递归先序
- 非递归中序
- 非递归后序
- 层序遍历
本科时候用cpp实现过一个版本,有兴趣的同学可以看下。
https://blog.csdn.net/hit1110...
本文模拟一下层序遍历
题解
8
/ \
6 10
/ \ / \
5 7 9 11
- 先把根节点入队
- 队列中的节点,如果有左子树和右子树,分别入队;
- 打印当前节点
队列中的元素分别为:
1. 8 inQueue; 【8】
2. 8 deQueue, 打印; 6 inQueue; 10 inQueue; 【6, 10】
3. 6 deQueue, 打印; 5 inQueue, 7 inQueue; 【10, 5, 7】
4. 10 deQueue, 打印; 9 inQueue, 11 inQueue; 【5, 7, 9, 11】
5. 5 deQueue, 打印; 【7, 9, 11】
5. 7 deQueue, 打印; 【9, 11】
5. 9 deQueue, 打印; 【11】
5. 11 deQueue, 打印;【】
代码
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> result = new ArrayList<>();
// 异常条件判断
if (root == null) {
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
TreeNode current = queue.poll();
TreeNode left = current.left;
TreeNode right = current.right;
if (left != null) {
queue.offer(left);
}
if (right != null) {
queue.offer(right);
}
result.add(current.val);
}
return result;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。