//给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 // // 例如: //给定二叉树 [3,9,20,null,null,15,7], // // // 3 // / \ // 9 20 // / \ // 15 7 // // // 返回锯齿形层序遍历如下: // // //[ // [3], // [20,9], // [15,7] //] // // Related Topics 栈 树 广度优先搜索 // 👍 421 👎 0 package leetcode.editor.cn; import com.code.leet.entiy.TreeNode; import java.util.*; //103:二叉树的锯齿形层序遍历 public class BinaryTreeZigzagLevelOrderTraversal { public static void main(String[] args) { //测试代码 Solution solution = new BinaryTreeZigzagLevelOrderTraversal().new Solution(); List list = Arrays.asList(3,9,20,null,null,15,7); solution.zigzagLevelOrder(new TreeNode(list)); } //力扣代码 //leetcode submit region begin(Prohibit modification and deletion) /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List> zigzagLevelOrder(TreeNode root) {List> ans = new LinkedList>(); if (root == null) { return ans; } Queue nodeQueue = new LinkedList(); nodeQueue.offer(root); boolean isOrderLeft = true; while (!nodeQueue.isEmpty()) { Deque levelList = new LinkedList(); int size = nodeQueue.size(); for (int i = 0; i < size; ++i) { TreeNode curNode = nodeQueue.poll(); if (isOrderLeft) { levelList.offerLast(curNode.val); } else { levelList.offerFirst(curNode.val); } if (curNode.left != null) { nodeQueue.offer(curNode.left); } if (curNode.right != null) { nodeQueue.offer(curNode.right); } } ans.add(new LinkedList(levelList)); isOrderLeft = !isOrderLeft; } return ans; } } //leetcode submit region end(Prohibit modification and deletion) }