给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层序遍历如下:
[
[3],
[20,9],
[15,7]
]
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<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null)return res;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);boolean leftToRight = true;//从左到右while (!queue.isEmpty()) {List<Integer> list = new ArrayList<>();int n = queue.size();for (int i = 0; i < n; i++) {TreeNode node = queue.poll();if (leftToRight == true) {list.add(node.val);//如果从左到右的顺序就正着插入 list} else {list.add(0, node.val);// 否则就按照倒序插入 list}if (node.left != null) {queue.add(node.left);}if (node.right != null) {queue.add(node.right);}}leftToRight = !leftToRight;res.add(list);}return res;}}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
