《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; } }
相关文章推荐
- Your build settings specify a provisioning profile with the UUID
- codeforces-580B Kefa and Company(二分)
- 诶,很有意思的点子——云适配
- win7 ghost 纯净版最新系统下载
- split使用和特殊使用(包括截取第一个字符后的数据)
- c++ string和char* char[]的互转
- Java排序与查找
- 查询Oracle视图定义
- 重建索引监控重建的进度
- linux下抓包工具tcpdump
- GC日志分析
- php的foreach深度剖析
- wordpress 播放视频
- Andorid Graphics(一):概述及基本几何图形绘制
- 虚拟现实跑步机
- js中请求数据的$post和$ajax区别(同步和异步问题)
- jetty jmx 配置
- java设计模式----状态模式
- iPad 2升级iOS 9的过程记录
- 40个Java多线程问题总结