题目描述

给定一个二叉树,返回该二叉树的之字形层序遍历,(从左向右,下一层从右向左,一直这样交替)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
3↵ / ↵ 9 20↵ / ↵ 15 7
该二叉树之字形层序遍历的结果是
[↵ [3],↵ [20,9],↵ [15,7]↵]

代码

思路:就是层次遍历

  1. public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
  2. ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
  3. if(root==null)
  4. return list;
  5. Queue<TreeNode> q = new LinkedList<TreeNode>();
  6. q.add(root);
  7. boolean flag = true;
  8. while(!q.isEmpty()) {
  9. int size = q.size();
  10. ArrayList<Integer> arr = new ArrayList<Integer>();
  11. for(int i=0;i<size;i++) {
  12. TreeNode node = q.poll();
  13. if(flag) {
  14. arr.add(node.val);
  15. }else {
  16. arr.add(0,node.val);
  17. }
  18. if(node.left!=null)
  19. q.add(node.left);
  20. if(node.right!=null)
  21. q.add(node.right);
  22. }
  23. list.add(arr);
  24. flag = !flag;
  25. }
  26. return list;