题解 | #牛群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集合的头部添加
  • 也可以先做一遍层序遍历,得到层序遍历的结果;然后再在整理答案时,针对奇数层逆序。
#二叉树的层序遍历#
线性表基础 文章被收录于专栏

链表、递归、栈

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务