剑指offer第六十题。
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路
一开始我以为就是简单的层序遍历嘛:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
   | public class Solution {     ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {         ArrayList<ArrayList<Integer> > res = new ArrayList<>();                  if(pRoot == null){             return res;         }                  LinkedList<TreeNode> queue = new LinkedList<>();                  queue.add(pRoot);                  while(!queue.isEmpty()){             TreeNode node = queue.pop();             ArrayList<Integer> list = new ArrayList<>();             list.add(node.val);                         if(node.left != null){                 queue.add(node.left);             }             if(node.right != null){                 queue.add(node.right);             }                          if(list.size() != 0){                 res.add(list);             }         }                  return res;     }      }
  | 
 
然后结果是:
1 2 3 4 5 6 7 8 9 10
   | 用例: {8,6,10,5,7,9,11}
  对应输出应该为:
  [[8],[6,10],[5,7,9,11]]
  你的输出为:
  [[8],[6],[10],[5],[7],[9],[11]]
   | 
 
事实上,这里需要将在同一层的数放到一个集合之中,所以还需要加工一下才行。
我的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
   | public class Solution {     ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {         ArrayList<ArrayList<Integer> > res = new ArrayList<>();                  if(pRoot == null){             return res;         }                  LinkedList<TreeNode> queue = new LinkedList<>();                  queue.add(pRoot);                           ArrayList<Integer> list = new ArrayList<>();         list.add(pRoot.val);         res.add(list);                  while(!queue.isEmpty()){                                       int num = queue.size();             list = new ArrayList<>();             while(num > 0){                 TreeNode node = queue.pop();                 if(node.left != null){                     list.add(node.left.val);                     queue.add(node.left);                 }                 if(node.right != null){                     queue.add(node.right);                     list.add(node.right.val);                 }                 num--;             }             if(list.size() != 0){                 res.add(list);             }         }         return res;     }      }
  |