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转为二维数组并返回。

京公网安备 11010502036488号