LeetCode Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:怎么开淘宝店铺步骤 编辑:程序博客网 时间:2024/06/06 18:22

Description:

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,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

[  [3],  [20,9],  [15,7]]

Solution:

和前面一道题目类似,但是java没有内置的将LinkedList倒置的方法,所以选择的是让每次变动指针读取的方向。

import java.util.*;public class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> list = new ArrayList<List<Integer>>();LinkedList<TreeNode> nodes = new LinkedList<TreeNode>();LinkedList<TreeNode> nextNodes = new LinkedList<TreeNode>();TreeNode node;boolean converse = false;ArrayList<Integer> array = new ArrayList<Integer>();nodes.add(root);while (true) {nextNodes = new LinkedList<TreeNode>();array = new ArrayList<Integer>();while (!nodes.isEmpty()) {if (converse) {node = nodes.pollLast();if (node == null)continue;array.add(node.val);nextNodes.push(node.right);nextNodes.push(node.left);} else {node = nodes.pollFirst();if (node == null)continue;array.add(node.val);nextNodes.add(node.left);nextNodes.add(node.right);}}if (nextNodes.isEmpty())break;list.add(array);nodes = nextNodes;converse = !converse;}System.out.println(list);return list;}}


0 0