剑指offer第22题:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
理解:
本题是按层对二叉树进行打印的标准基础题。使用一个队列,或者ArrayList、LinkedList集合模拟一个队列,作为辅助空间。一边对已经压入的结点取出,提取值存入list,一边将取出的node的左右子结点压入。
import java.util.ArrayList;
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) {
ArrayList<Integer> list = new ArrayList<>();
if(root == null){
return list;
}
//创建一个链表集合模拟队列
LinkedList<TreeNode> queue = new LinkedList<>();
//将根结点压入
queue.add(root);
//只要队列不是空的就需要继续
while(!queue.isEmpty()){
TreeNode node = queue.poll();
list.add(node.val);
//上面是进行输出,下面是进行压入,同时进行
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
}
return list;
}
}
知识点:
- LinkedList集合类型;
- LinkedList与ArrayList集合的区别;
- 使用集合类型模拟队列结构;
- LinkedListl类常用方法:
xx.add(xx)
xx.addLast(xx)
xx.poll()
xx.remove()