问题描述:
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / 9 20 / 15 7
返回锯齿形层次遍历如下:
[ [3], [20,9], [15,7] ]
解题思路:
解决方法与二叉树的层次遍历基本一致,只是在向节点node对应的层数中添加节点值时,需要判断节点层数level为奇数还是偶数。
若是偶数,将节点值添加至该层的最前方
若是奇数,将节点值添加至该层的最后方
实现代码:
private static List<List<Integer>> list = new LinkedList<List<Integer>>(); private static void test(TreeNode node, int level) { if (node == null) return; // 在向对应的层数level中添加节点node的值时 // 首先判断level为奇数还是偶数 // 若是偶数,添加至该层的最前方 // 若是奇数,添加至该层的最后方 if (level < list.size()) { if (level % 2 == 0) list.get(level).add(node.val); else list.get(level).add(0, node.val); } else { list.add(new LinkedList<Integer>()); list.get(level).add(node.val); } test(node.left, level+1); test(node.right, level+1); } public static List<List<Integer>> zigzagLevelOrder(TreeNode root) { test(root, 0); return list; }
原文:https://www.cnblogs.com/deltadeblog/p/9291139.html