题解 | #牛群Z字型排列#
牛群Z字型排列
https://www.nowcoder.com/practice/50ddaf50c6954600a9f1dbb099d6f388
在常规的层序遍历的基础上做一下改进:
第一层的元素按照从左到右的顺序添加进数组当中,第二层的元素按照从右到左的顺序添加进数组。
我们定义一个变量记录当前循环的次数,如果循环次数是偶数,那么就是要按照从右到左的顺序添加元素。
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整型二维数组
*/
public int[][] ZLevelOrder (TreeNode root) {
List<int []> res = new ArrayList<>();
if(root == null) return new int[0][0];
Deque<TreeNode> deque = new LinkedList<>();
deque.offer(root);
int count = 0; // 用于控制集合中的元素是否反转,如果是偶数,那么当前的子集反转即可。
int index = 0;
while(!deque.isEmpty()){
count++;
int size = deque.size();
int arr[] = new int[size];
// 如果是偶数次循环,那么从右到左将当前的元素添加进数组中
index = count % 2 == 0 ? arr.length - 1 : 0;
for(int i=0;i<size;i++){
TreeNode node = deque.poll();
if(count % 2 == 0) arr[index--] = node.val;
else arr[index++] = node.val;
if(node.left!=null) deque.offer(node.left);
if(node.right!=null) deque.offer(node.right);
}
// 收集结果
res.add(arr);
}
// 将 res 转换位数组
return res.toArray(new int[0][]);
}
}
深信服公司福利 836人发布