题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路
以下图为例
先从根节点8开始打印,为了打印8节点的两个子结点,在遍历到该节点时把6和10两个结点保存到容器中,然后取出6的结点打印,此时把6的两个子结点5 7保存到容器中,这时容器中有(10,5,7),接下来取出10的结点打印,把10的两个子结点9 11放入容器中,此时容器中有(5 7 9 11)
它们都没有子结点,依次把它们取出打印。通过观察上述过程可以发现,这是个广度优先遍历过程,需要用到的数据结构是队列。
注释 广度优先遍历过程是把起始结点放入队列中,然后每一部先取出队列头部结点,遍历这个节点后把从它能到达的所有结点都放入队列中,重复这个过程,直到队列为空。
代码
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (root == null)
return list;
ArrayList<TreeNode> queue = new ArrayList<TreeNode>();
queue.add(root);
while (queue.size() != 0){
TreeNode temp = queue.remove(0);
if (temp.left != null)
queue.add(temp.left);
if (temp.right != null)
queue.add(temp.right);
list.add(temp.val);
}
return list;
}
}