您的位置:首页 > 其它

LeetCode:Binary Tree Zigzag Level Order Traversal

2016-06-15 11:41 507 查看


Binary Tree Zigzag Level Order Traversal

Total Accepted: 63108 Total
Submissions: 216632 Difficulty: Medium

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,null,null,15,7]
,

3
/ \
9  20
/  \
15   7


return its zigzag level order traversal as:

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


Subscribe to see which companies asked this question

Hide Tags
Tree Breadth-first
Search Stack

Hide Similar Problems
(E) Binary Tree Level Order Traversal

思路:

树的层次遍历,模板式的代码。可参考【Binary Tree Level Order
Traversal】和【Binary Tree
Level Order Traversal II】

java code:

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {

Queue<TreeNode> queue = new LinkedList<TreeNode>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();

if(root == null) return ans;
boolean leftToRight = true;

queue.offer(root);
while(!queue.isEmpty()) {

int size = queue.size();
List<Integer> subAns = new ArrayList<Integer>(size);
for(int i=0;i<size;i++) {
TreeNode tmp = queue.poll();
subAns.add(i, tmp.val);

if(tmp.left != null) queue.offer(tmp.left);
if(tmp.right != null) queue.offer(tmp.right);
}
if(!leftToRight) Collections.reverse(subAns); // 左到右,翻转
leftToRight = !leftToRight;
ans.add(subAns);
}
return ans;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: