您的位置:首页 > 其它

《leetCode》:Binary Tree Zigzag Level Order Traversal

2016-02-26 10:42 393 查看

题目

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


思路

有了前几篇博文的思路,这个题就相当简单了,也是借助于两个队列来完成,只是要偶数层要进行翻转一下,用一个指示器来完成即可。

实现代码如下:

/**
* 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) {

return  zigzagLevelOrderHelper(root);
}
//思路:还是借助两个队列来进行
private List<List<Integer>> zigzagLevelOrderHelper(TreeNode root) {
List<List<Integer>> res=new ArrayList<List<Integer>>();
if(root==null){
return res;
}
Queue<TreeNode> q1=new LinkedList<TreeNode>();
Queue<TreeNode> q2=new LinkedList<TreeNode>();
//将根节点入队列
q1.add(root);
//将根节点的值保存在结果中
List<Integer> firstRes=new ArrayList<Integer>();
firstRes.add(root.val);
res.add(firstRes);
int leverIndex=2;//下面将从第二层开始
while(!(q1.isEmpty()&&q2.isEmpty())){
while(!q1.isEmpty()){
//将q1中队首元素出栈
TreeNode node=q1.poll();
if(node.left!=null){
q2.add(node.left);
}
if(node.right!=null){
q2.add(node.right);
}
}
//将q2中的元素转到q1中
List<Integer> leverNodeValue=new ArrayList<Integer>();
while(!q2.isEmpty()){
TreeNode tempNode=q2.poll();
leverNodeValue.add(tempNode.val);
q1.add(tempNode);
}
if(leverIndex%2==0){//需要翻转
Collections.reverse(leverNodeValue);
}
if(!leverNodeValue.isEmpty()){//注意要判断
res.add(leverNodeValue);
}
leverIndex++;

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