剑指 Offer 32 - III. 从上到下打印二叉树 III
package leetcode; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack; public class offer_32_3 { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> list=new ArrayList<List<Integer>>(); //使用链表 LinkedList<TreeNode> queue=new LinkedList<TreeNode>(); if(root==null) {return list;} int begin=0; int oldend; int end=0; int level=0; queue.addFirst(root); while(!queue.isEmpty()) { oldend=end; List<Integer> l=new ArrayList<Integer>(); TreeNode temp; //偶数行从链表头读取,并将子节点按左右存入 if(level%2==0) { while(begin<=oldend) { temp=queue.removeFirst(); l.add(temp.val); if(temp.left!=null) { queue.addLast(temp.left); end=end+1; } if(temp.right!=null) { queue.addLast(temp.right); end=end+1; } begin=begin+1; } }else { //奇数行从链表尾读取,并将子节点按右左存入 while(begin<=oldend) { temp=queue.removeLast(); l.add(temp.val); if(temp.right!=null) { queue.addFirst(temp.right); end=end+1; } if(temp.left!=null) { queue.addFirst(temp.left); end=end+1; } begin=begin+1; } } list.add(l); //记录行数 level=level+1; } return list; } }