Binary Tree Level Order Traversal leetcode OJ java
2015-11-17 18:59
351 查看
题目:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree
return its level order traversal as:
解题思路: 用队列来存放TreeNode,依次将每一层放入到队列中,取值即可。
贴完整代码方便大家调试,因为自己本身是新手,为了提高正确率,会自己写例子实现。提交的时候只需要levelOrder 即可。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class isBalanced {
public static List<List<Integer>> levelOrder(TreeNode root){
Queue <TreeNode> que = new LinkedList<TreeNode>();
List<List<Integer>> re = new ArrayList<List<Integer>>();
List<Integer> ro = new ArrayList<Integer>();
TreeNode tmp = root;
if(tmp == null) {
return re;
}
que.offer(tmp);
while(!que.isEmpty()){
Queue <TreeNode> que1 = new LinkedList<TreeNode>();
while(!que.isEmpty()){
tmp = que.peek();
ro.add(tmp.val);
que.poll();
if(tmp.left != null)
que1.offer(tmp.left);
if(tmp.right != null)
que1.offer(tmp.right);
}
List<Integer> roo = new ArrayList<Integer>(ro);
re.add(roo);
ro.clear();
que = que1;
}
return re;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode root = new TreeNode(3);
TreeNode rl = new TreeNode(9);
TreeNode rr = new TreeNode(20);
TreeNode rrl = new TreeNode(15);
TreeNode rrr = new TreeNode(7);
root.left = rl;
root.right = rr;
rr.left = rrl;
rr.right = rrr;
List<List<Integer>> a = levelOrder(root);
System.out.println(a);
}
}
编码过程中有几个小问题MARK之:
1、 用ctrl + shift + o 自动导入包的时候LIST包的选择有误,应该选util的
2、之前不熟悉java中队列对应的方法,常用的方法有:
offer() 和 add() 都可以实现push 操作但是队列为空的时候offer()方法不会报错,add()会报错。
poll() 实现了pop 操作
peak() 则是取出队列中的第一个元素。
3、最初的时候并没有引入 roo ,得到的结果是全空。 我认为可能是ro 分配的时候指向了一个地址,clear()之后re中ro指向的地方被clear掉了。 因此引入了roo 。
具体的原因求大神解释,之前用到list的时候出现过很多次这样的情况。
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree
{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
解题思路: 用队列来存放TreeNode,依次将每一层放入到队列中,取值即可。
贴完整代码方便大家调试,因为自己本身是新手,为了提高正确率,会自己写例子实现。提交的时候只需要levelOrder 即可。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class isBalanced {
public static List<List<Integer>> levelOrder(TreeNode root){
Queue <TreeNode> que = new LinkedList<TreeNode>();
List<List<Integer>> re = new ArrayList<List<Integer>>();
List<Integer> ro = new ArrayList<Integer>();
TreeNode tmp = root;
if(tmp == null) {
return re;
}
que.offer(tmp);
while(!que.isEmpty()){
Queue <TreeNode> que1 = new LinkedList<TreeNode>();
while(!que.isEmpty()){
tmp = que.peek();
ro.add(tmp.val);
que.poll();
if(tmp.left != null)
que1.offer(tmp.left);
if(tmp.right != null)
que1.offer(tmp.right);
}
List<Integer> roo = new ArrayList<Integer>(ro);
re.add(roo);
ro.clear();
que = que1;
}
return re;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode root = new TreeNode(3);
TreeNode rl = new TreeNode(9);
TreeNode rr = new TreeNode(20);
TreeNode rrl = new TreeNode(15);
TreeNode rrr = new TreeNode(7);
root.left = rl;
root.right = rr;
rr.left = rrl;
rr.right = rrr;
List<List<Integer>> a = levelOrder(root);
System.out.println(a);
}
}
编码过程中有几个小问题MARK之:
1、 用ctrl + shift + o 自动导入包的时候LIST包的选择有误,应该选util的
2、之前不熟悉java中队列对应的方法,常用的方法有:
offer() 和 add() 都可以实现push 操作但是队列为空的时候offer()方法不会报错,add()会报错。
poll() 实现了pop 操作
peak() 则是取出队列中的第一个元素。
3、最初的时候并没有引入 roo ,得到的结果是全空。 我认为可能是ro 分配的时候指向了一个地址,clear()之后re中ro指向的地方被clear掉了。 因此引入了roo 。
具体的原因求大神解释,之前用到list的时候出现过很多次这样的情况。
相关文章推荐
- Java类型转换运算
- java代码校验手机号,带区号固定电话和400类型的固定电话
- Java多态和动态绑定是如何实现的
- 小手一抖,eclipse妙用
- Java应用类加载器原理与应用
- Struts2 两层list遍历<s:iterator>
- 一起代码,两分钟,实现 java restful webservice
- SpringMvc+POI 处理Excel的导入操作
- Java servlet解决中文乱码的解决方案
- java对elasticsearch操作
- Maven项目下update maven后Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderL
- maven——install、package等命令,忽略javadoc生成
- 【Java小项目】一个Socket连续传输多个文件
- JAVA 自定义异常类
- Java批量修改本地Mp3的名称为Mp3Tag中的歌名
- @Transactional spring 配置事务 注意事项
- JAVA 使用properties配置文件
- CXF动态客户端调用JDK自带Webservice安全校验
- Caused by: java.lang.IllegalStateException: not connected to MediaScannerSer
- springmvc通过@ResponseBody 自动解析为json对象支持中文