题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路分析
在剑指offer(60)题基础上,再加入一个判断层数奇偶的方法
代码大同小异 不多赘述
代码
import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.Queue; public class 按之字形顺序打印二叉树 { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); if (pRoot == null){ return list; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); ArrayList<Integer> list1 = new ArrayList<Integer>(); queue.offer(pRoot); int start = 0; //当前层数已添加节点数 int end = 1; //当前层数目标添加节点数 int count = 1; //记录当前层数 while (!queue.isEmpty()){ TreeNode temp = queue.poll(); list1.add(temp.val); start++; if (temp.left != null) { queue.offer(temp.left); } if (temp.right != null) { queue.offer(temp.right); } if (start == end) { end = queue.size(); //本层的所有节点已出队,队列中所剩刚好是下一层的全部节点 start = 0; list1 = judge(count, list1); list.add(list1); count++; list1 = new ArrayList<Integer>(); } } return list; } public ArrayList<Integer> judge(int count,ArrayList<Integer> list1){ if (count%2 == 1) { return list1; } else { Collections.reverse(list1); return list1; } } public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } }
结果