您的位置:首页 > 其它

LeetCode - Binary Tree Zigzag Level Order Traversal

2014-07-08 10:42 447 查看
作者:disappearedgod
文章出处:/article/3730169.html
时间:2014-5-26

题目


Binary Tree Zigzag Level Order Traversal

Total Accepted: 11074 Total
Submissions: 41859My Submissions

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]
]


confused what
"{1,#,2,3}"
means? >
read more on how binary tree is serialized on OJ.

解法

1.添加奇偶层
多次提交后AC
/**
* Definition for binary tree
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
//Deque<Integer> stack = new ArrayDeque<Integer>();
ArrayList<ArrayList<Integer>>  retlist = new ArrayList<ArrayList<Integer>> ();

if(root!=null){
Deque<TreeNode> s = new ArrayDeque<TreeNode>();

s.push(root);
boolean stop = false;
boolean odd= true;
while(!stop){
Deque<TreeNode> s2 = new ArrayDeque<TreeNode>();
ArrayList<Integer> list = new ArrayList<Integer>();
while(!s.isEmpty()){

if(odd){
TreeNode t = s.pop();
if(t==null)
continue;
list.add(t.val);
if(t.left!=null)
s2.push(t.left);
if(t.right!=null)
s2.push(t.right);

}else{
TreeNode t = s.pop();
if(t==null)
continue;
list.add(t.val);
if(t.right!=null)
s2.push(t.right);
if(t.left!=null)
s2.push(t.left);

}
}
odd = !odd;
retlist.add(list);
if(s2.isEmpty())
return retlist;
s = s2;
System.gc();

}
}
return retlist;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: