##剑指offer之打印二叉树
题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行
public class Demo36 {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
if (pRoot==null)
return result;
if (pRoot!=null){
Queue<TreeNode> up=new LinkedList<>();//存储上一行的结点
Queue<TreeNode> down=new LinkedList<>();//储存下一行的结点
up.offer(pRoot);//根结点入队
while (!up.isEmpty()) {
//双重循环
ArrayList<Integer> list = new ArrayList<>();//新建一个数组存放这一行数据
while (!up.isEmpty()) {
//层次遍历
TreeNode poll = up.poll();
list.add(poll.val);
if (poll.left != null)//左子树结点
down.offer(poll.left);
if (poll.right != null)//右子树
down.offer(poll.right);
}
result.add(list);
//交换上下两行
Queue<TreeNode> temp=up;
up=down;
down=temp;
}
}
return result;
}
}
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印
//二叉树的层次遍历,可以用队列来实现
public class Demo24 {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list=new ArrayList<>();
if (root==null) return list;
Queue<TreeNode> queue =new LinkedList<TreeNode>();
queue.offer(root);
while (!queue.isEmpty()){
TreeNode poll = queue.poll();//根节点出队
list.add(poll.val);//添加到list中
//左子树节点入队
if (poll.left!=null)
queue.offer(poll.left);
//右子树结点入队
if (poll.right!=null)
queue.offer(poll.right);
}
return list;
}
}