【leetcode】103. 二叉树的锯齿形层序遍历

题目描述

给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
【leetcode】103. 二叉树的锯齿形层序遍历

题解

正常层次遍历,用LinkedList实现保存一层的结果path,利用count计数,当count为奇数的时候,调用path.addFirst()头插。详见代码注释。

class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        //结果
        List<List<Integer>> res = new ArrayList<>();
        if (root == null) return res;
        //层次便利需要的队列
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        //用于计数,奇数的时候反转,偶数的时候不反转
        int count = 0;
        while (!queue.isEmpty()){
            int size = queue.size();
            //保存每一层的结果
            LinkedList<Integer> path = new LinkedList<>();
            for (int i = 0; i < size; i++){
                TreeNode tmp = queue.poll();
                if (tmp.left != null) queue.add(tmp.left);
                if (tmp.right != null) queue.add(tmp.right);
                if (count % 2 == 1){
                    //奇数层,头插
                    path.addFirst(tmp.val);
                }else{
                    //偶数层,正常从前往后加入
                    path.addLast(tmp.val);
                }
            }
            //一层遍历结束之后,添加到结果,count++
            count++;
            res.add(new ArrayList<>(path));
        }
        return res;
    }
}
上一篇:【leetcode】103:二叉树的锯齿形层序遍历


下一篇:【基础算法】前缀和、二维前缀和