题解 | #牛群Z字型排列#
牛群Z字型排列
https://www.nowcoder.com/practice/50ddaf50c6954600a9f1dbb099d6f388
import java.util.*; import java.util.stream.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型二维数组 */ public int[][] ZLevelOrder (TreeNode root) { // write code here List<List<Integer>> ans = new ArrayList<>(); levelOrder(root, 0, ans); return ans.stream().map(v -> v.stream().mapToInt(Integer::intValue).toArray()) .collect(Collectors.toList()) .toArray(new int[0][0]); } private void levelOrder(TreeNode root, int level, List<List<Integer>> ans) { if (root == null) return; if (level == ans.size()) ans.add(new ArrayList<>()); if (level % 2 == 0) ans.get(level).add(root.val); else ans.get(level).add(0, root.val); levelOrder(root.left, level + 1, ans); levelOrder(root.right, level + 1, ans); } }
- 基于二叉树的层序遍历实现,关键在于遍历到每一层时的特殊处理
- 若level层为偶数,则正常顺序添加元素到集合,即从List集合的尾部添加
- 若level层为奇数,则逆序添加,即每次从List集合的头部添加
- 也可以先做一遍层序遍历,得到层序遍历的结果;然后再在整理答案时,针对奇数层逆序。
线性表基础 文章被收录于专栏
链表、递归、栈