1.题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目分析:
- 二叉树的层次遍历
- 层次遍历使用的是队列
- 对二叉树中的每层进行遍历, 现在需要的是2个容器,第一个容器放层次遍历的结果,第二个容器放队列,队列就是一个过渡的容器。
知识点:
- remove(int index): 移除列表中指定位置的元素,并返回被删元素。
2.代码实现
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
/*
本题典型的层次遍历
1.对二叉树中的每层进行遍历
2.现在需要的是2个容器,第一个容器放层次遍历的结果
第二个容器放队列
3.队列就是一个过渡的容器
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
// 定义层次遍历结果的容器
ArrayList<Integer> list = new ArrayList<>();
//定义一个集合,模拟的是一个队列,泛型是TreeNode
ArrayList<TreeNode> queue = new ArrayList<>();
//判断这个二叉树是否存在,判断根元素
if(root == null){
return list;
}
//把根元素放进队列中,队列的类型是树节点类型
queue.add(root);
//遍历其他的结点
//队列不空
while(queue.size() != 0){
//remove(int index): 移除列表中指定位置的元素,并返回被删元素。
TreeNode temp = queue.remove(0);
//接下来判断temp的左右结点是否存在
if(temp.left != null){
queue.add(temp.left);
}
if(temp.right != null){
queue.add(temp.right);
}
//每次循环都会将元素放进去
list.add(temp.val);
}
return list;
}
}
3.总结
- 今天买了《剑指Offer》的纸质版,《算法》纸质版,打算好好研究算法。
- 在牛客网上看到别人的帖子,看的热血沸腾。我也一定可以!