import java.util.*; /* * 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整型二维数组 */ int level = 1; List<List<Integer>> ret = new ArrayList<>(); Queue<TreeNode> q = new LinkedList<>(); public int[][] ZLevelOrder(TreeNode root) { // 如果根节点为空,直接返回空数组 if (root == null) { return new int[0][0]; } // 将根节点加入队列 q.add(root); // 创建一个列表 ele,用于存储当前层级的节点值 List<Integer> ele = new ArrayList<>(); // 循环遍历队列,直到队列为空 while (!q.isEmpty()) { // 获取当前层级的节点个数 int size = q.size(); // 遍历当前层级的节点 for (int i = 0; i < size; i++) { // 将节点值加入到列表 ele 中 ele.add(q.peek().val); // 如果当前节点的左子节点不为空,将左子节点加入队列 if (q.peek().left != null) { q.add(q.peek().left); } // 如果当前节点的右子节点不为空,将右子节点加入队列 if (q.peek().right != null) { q.add(q.peek().right); } // 弹出队列头部节点 q.poll(); } // 如果层数为偶数,将列表 ele 倒序 if (level % 2 == 0) { reverseList(ele); } // 将列表 ele 添加到结果 ret 中 ret.add(ele); // 清空列表 ele ele = new ArrayList<>(); // 层数加一 level++; } // 将结果 ret 转为二维数组并返回 int[][] ans = new int[ret.size()][]; for (int i = 0; i < ret.size(); i++) { List<Integer> sublist = ret.get(i); ans[i] = new int[sublist.size()]; for (int j = 0; j < sublist.size(); j++) { ans[i][j] = sublist.get(j); } } return ans; } private void reverseList(List<Integer> list) { int left = 0; int right = list.size() - 1; while (left < right) { int temp = list.get(left); list.set(left, list.get(right)); list.set(right, temp); left++; right--; } } }
这段代码使用Java语言实现了二叉树的层序遍历,并按照Z字形(之字形)顺序输出节点的值。主要逻辑如下:
- 定义了一个
TreeNode
类作为二叉树的节点类,包含节点值val
、左子节点left
和右子节点right
。 - 创建了一个
Solution
类,包含了一些成员变量:level
表示当前层数,初始值为1;ret
是二维列表,用于存储最终结果;q
是队列,用于层序遍历树的节点。 - 实现了一个
ZLevelOrder
方法,接收一个二叉树的根节点作为参数,返回一个二维数组。方法内部进行层序遍历。 - 如果根节点为空,则直接返回空数组。
- 将根节点加入队列中。
- 创建一个列表
ele
,用于存储当前层级的节点值。 - 循环遍历队列,直到队列为空:获取当前层级的节点个数size。遍历当前层级的节点:将节点值加入列表ele中。如果当前节点的左子节点不为空,则将左子节点加入队列。如果当前节点的右子节点不为空,则将右子节点加入队列。弹出队列头部节点。如果层数为偶数,将列表ele倒序。将列表ele添加到结果ret中。清空列表ele。层数加一。
- 将结果
ret
转为二维数组并返回。