103、二叉树的锯齿状层次遍历

  1. 例如:
  • 题解
  • 1、队列+迭代+分层处理
    1. 2、队列+栈+分层处理
  • 103、二叉树的锯齿形层次遍历

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

    例如:

    给定二叉树 [3,9,20,null,null,15,7],
    
        3
       / \
      9  20
        /  \
       15   7
    返回锯齿形层次遍历如下:
    
    [
      [3],
      [20,9],
      [15,7]
    ]
    

    链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal

    题解

    1、队列+迭代+分层处理

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
            List<List<Integer>> ans = new ArrayList<List<Integer>>();
            Queue<TreeNode> queue = new LinkedList<>();
            if (root == null){
                return ans;
            }
            queue.offer(root);
            List<Integer> tmp = new ArrayList<>();
            int level = 1;
            int nextLevel = 0;// 下一个层节点的数量
            int curLevel = 1;// 当前节点的数量
            while(!queue.isEmpty()) {
                TreeNode node = queue.peek();
                tmp.add(node.val);
                if (node.left != null) {
                    queue.offer(node.left);
                    nextLevel++;
                }
                if (node.right != null) {
                    queue.offer(node.right);
                    nextLevel++;
                }
                queue.poll();
                curLevel--;// 当前层的节点数减一
                // 当前层的所有节点处理完了
                if (curLevel == 0) {
                    curLevel = nextLevel;
                    nextLevel = 0;
                    // 偶数层进行序列反转
                    if (level % 2 == 0){
                        Collections.reverse(tmp);
                    }
                    level++;
                    ans.add(tmp);
                    tmp =  new ArrayList<>();
                }
            }
            return ans;
        }
    }
    

    2、队列+栈+分层处理


    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com

    💰

    Title:103、二叉树的锯齿状层次遍历

    Count:338

    Author:攀登

    Created At:2020-07-26, 00:19:44

    Updated At:2024-06-15, 15:52:32

    Url:http://jiafeimao-gjf.github.io/2020/07/26/103%E3%80%81%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%94%AF%E9%BD%BF%E7%8A%B6%E5%B1%82%E6%AC%A1%E9%81%8D%E5%8E%86/

    Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

    ×

    Help us with donation