题解 | #牛群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][]);
    }
}

全部评论

相关推荐

牛客464620405号:随便投,随便找,中国经过40多年的改革开放,人才缺口和职位空缺是巨大的,中国现在属于遍地黄金的年代,属于90后和00大机遇的时代
点赞 评论 收藏
分享
永不遗忘:才这么点算什么拉黑,我初筛连着挂几十次了,最后还是能进面
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务