Binary Tree Zigzag Level Order Traversal
Total Accepted: 5345 Total Submissions: 20535 My SubmissionsGiven 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] ]
这道题目我认为我正确了,但是没有AC,大体例子都过了,但是出现错误如下,不知道为什么。
Input: | {1} |
Output: | [1] |
Expected: | [[1]] |
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
static int index = 0;
static int currentlevel = 1;
static int nextlevel = 0;
static int count = 0;
static ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
static ArrayList<Integer> r = new ArrayList<Integer>();
static Queue<TreeNode> s = new LinkedList<TreeNode>();
public void traverse(TreeNode root){
while(!s.isEmpty()){
TreeNode current = s.remove();
r.add(current.val);
count ++;
if(current.left != null){
s.add(current.left);
nextlevel ++;
}
if(current.right != null){
s.add(current.right);
nextlevel ++;
}
if(currentlevel == count)
{
ArrayList<Integer> rr = new ArrayList<Integer>();
rr = r;
if(index % 2 == 1){
Collections.reverse(rr);
result.add(rr);
r = new ArrayList<Integer>();
}
else{
result.add(rr);
r = new ArrayList<Integer>();
}
System.out.println(rr);
count = 0;
currentlevel = nextlevel;
index = index + 1;
nextlevel = 0;
}
}
}
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
if(root == null)
return result;
s.add(root);
traverse(root);
return result;
}
}