LeetCode 103. Binary Tree Zigzag Level Order Traversal(二叉树)

    xiaoxiao2025-01-08  51

    题目来源:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

    问题描述

    103. Binary Tree Zigzag Level Order Traversal

    Medium

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

    For example: Given binary tree [3,9,20,null,null,15,7],

        3

       / \

      9  20

        /  \

       15   7

    return its zigzag level order traversal as:

    [

      [3],

      [20,9],

      [15,7]

    ]

    ------------------------------------------------------------

    题意

    LeetCode 102. Binary Tree Level Order Traversal(二叉树bfs)的姊妹题。蛇形方式输出二叉树。

    ------------------------------------------------------------

    思路

    在LeetCode 102. Binary Tree Level Order Traversal(二叉树bfs)的解法的基础上增加奇数层取反的操作。Java中List倒序用Collections.reverse方法。

    ------------------------------------------------------------

    代码

    /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { class ListNode { int val, level; TreeNode left, right; public ListNode(int val, int level, TreeNode left, TreeNode right) { this.val = val; this.level = level; this.left = left; this.right = right; } } public List<List<Integer>> zigzagLevelOrder(TreeNode root) { if (root == null) { return Collections.emptyList(); } LinkedList<ListNode> queue = new LinkedList<ListNode>(); queue.add(new ListNode(root.val, 0, root.left, root.right)); int curLevel = 0; List<List<Integer>> ret = new LinkedList<>(); List<Integer> levelList = new LinkedList<Integer>(); while (!queue.isEmpty()) { ListNode head = queue.pollFirst(); if (head.left != null) { queue.add(new ListNode(head.left.val, head.level+1, head.left.left, head.left.right)); } if (head.right != null) { queue.add(new ListNode(head.right.val, head.level+1, head.right.left, head.right.right)); } if (head.level > curLevel) { if (curLevel%2 == 1) { Collections.reverse(levelList); } ret.add(levelList); levelList = new LinkedList<Integer>(); curLevel = head.level; } levelList.add(head.val); } if (curLevel%2 == 1) { Collections.reverse(levelList); } ret.add(levelList); return ret; } }

     

    最新回复(0)