剑指offer-21-从上往下打印二叉树
-
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
-
思路:二叉树的按层遍历(广度优先遍历),使用一个辅助队列。
1.每打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。 接着从队列头部取出节点并打印,循环,直到队列中所有的节点都被打印出来。
2.队列常用方法:offer()、poll()、peek()
LinkedList实现了Queue接口 -
代码
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/**
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) {
//打印队列,LinkedList实现了Queue接口。
//对应的方法为offer()、poll()、peek()
Queue<TreeNode> queue = new LinkedList<TreeNode>();
//printArray中存储的为打印值
ArrayList<Integer> printArray = new ArrayList<Integer>();
if(root!=null){
queue.offer(root);
while(!queue.isEmpty()){
if(queue.peek().left!=null){
queue.offer(queue.peek().left);
}
if(queue.peek().right!=null){
queue.offer(queue.peek().right);
}
printArray.add(queue.poll().val);
}
}
return printArray;
}
}