1. 本题知识点
二叉树
2. 题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
3. 解题思路
- 创建一个队列,创建一个线性表
- 将二叉树的根节点加入队尾
- 当队列不为空时,执行以下循环
- 删除队头
- 将删除的队头加入线性表
- 将删除的队头的左右子树加入队尾
- 返回线性表
4. 代码
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
/**
* 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
* @param root
* @return
*/
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
// 创建一个队列
Queue<TreeNode> queue = new LinkedList<>();
// 创建一个线性表
ArrayList<Integer> list = new ArrayList<>();
// 根节点不为空时,将其加入队尾
if (root!= null) {
queue.add(root);
}
// 队列不为空时,执行循环
while (!queue.isEmpty()) {
// 删除队头
TreeNode removeNode = queue.remove();
// 将删除的队头加入线性表
list.add(removeNode.val);
// 如果删除的队头有左子树,将其加入队尾
if (removeNode.left != null) {
queue.add(removeNode.left);
}
// 如果删除的队头有右子树,将其加入队尾
if(removeNode.right != null) {
queue.add(removeNode.right);
}
}
return list;
}
}