Binary Tree Level Order Traversal

二叉树的层序遍历

两种方式:

1、用两个queue交替表示每一层的节点

2、用两个node,一个表示当前层的最后一个节点,一个表示下一层的最后一个节点

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.Queue;
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> list = new ArrayList<List<Integer>>();
if(root == null)
return list;
Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
Queue<TreeNode> queue2 = new ArrayDeque<TreeNode>();
queue.offer(root); List<Integer> listLevel = new ArrayList<Integer>(); TreeNode curNode = null;
while( !queue.isEmpty() || (!queue2.isEmpty())) {
while(!queue.isEmpty()){
curNode = queue.poll();
listLevel.add(curNode.val);
if(curNode.left != null) queue2.offer(curNode.left);
if(curNode.right != null) queue2.offer(curNode.right); if(queue.isEmpty()){
list.add(listLevel);
listLevel = new ArrayList<Integer>();
}
} while(!queue2.isEmpty()){
curNode = queue2.poll();
listLevel.add(curNode.val);
if(curNode.left != null) queue.offer(curNode.left);
if(curNode.right != null) queue.offer(curNode.right); if(queue2.isEmpty()){
list.add(listLevel);
listLevel = new ArrayList<Integer>();
}
} } /** 两个node,
* lastNode: 当前层的最后一个节点
* lastInqueue:表示某层最后进入队列的节点
TreeNode curNode = root;
TreeNode lastNode = root;
TreeNode lastInQueue = root;
while(!queue.isEmpty()){
curNode = queue.poll();
listLevel.add(curNode.val); if(curNode.left != null){
queue.offer(curNode.left);
lastInQueue = curNode.left;
}
if(curNode.right != null){
queue.offer(curNode.right);
lastInQueue = curNode.right; } if(curNode == lastNode){
list.add(listLevel);
// get last node
lastNode = lastInQueue;
listLevel = new ArrayList<Integer>(); }
}
*/ return list;
}
}

lettcode-102:Binary Tree Level Order Traversal (Java)的更多相关文章

  1. leetcode 102 Binary Tree Level Order Traversal ----- java

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  2. [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. 102. Binary Tree Level Order Traversal 广度优先遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  4. 【LeetCode】102. Binary Tree Level Order Traversal (2 solutions)

    Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...

  5. [刷题] 102 Binary Tree Level Order Traversal

    要求 对二叉树进行层序遍历 实现 返回结果为双重向量,对应树的每层元素 队列的每个元素是一个pair对,存树节点和其所在的层信息 1 Definition for a binary tree node ...

  6. Java for LeetCode 102 Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  7. Java [Leetcode 102]Binary Tree Level Order Traversal

    题目描述: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ...

  8. 102. Binary Tree Level Order Traversal

    题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...

  9. 【leetcode刷题笔记】Binary Tree Level Order Traversal(JAVA)

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

随机推荐

  1. VSPackge插件系列:如何正确获取DTE

    做VS插件开发,不得不了解DTE,有了DTE我们就可以与VS交互了,比如说获取当前选择的文件,比如说获取当前主窗口,比如说获取编译器等等,关于DTE接口更多的说明我把接口地址贴出来方便大家查阅. ht ...

  2. 【转】oracle的substr函数的用法

    [转]oracle的substr函数的用法 )     would return 'The' ) value from dual

  3. 【C#4.0图解教程】笔记(第9章~第18章)

    第9章 语句 1.标签语句 ①.标签语句由一个标识符后面跟着一个冒号再跟着一条语句组成 ②.标签语句的执行完全如同标签不存在一样,并仅执行冒号后的语句. ③.给语句添加一个标签允许控制从代码的另一部分 ...

  4. asp生成静态HTML(动态读取)

    这样的代码多用于我们没有实现设计生成静态的功能,但又想临时将一些动态页面生成静态的,直接获取动态内容并保存为静态的 复制代码代码如下: <!--#include file="admin ...

  5. Spring AOP (Spring 3.x 企业应用开发实战读书笔记第六章)

    从面相对象编程到面相切面编程,是一种代码组织方式的进化. 每一代的代码组织方式,其实是为了解决当时面对的问题.比如写编译器和写操作系统的时候的年代当然要pop,比如写界面的时候当然要oop,因为界面这 ...

  6. Ubuntu Update-rc.d命令详细介绍

    http://www.jb51.net/os/Ubuntu/182768.html Ubuntu或者Debian系统中update-rc.d命令,是用来更新系统启动项的脚本.这些脚本的链接位于/etc ...

  7. CBQW ---分组表单展示

    工作流审核表单后,将表单信息展示页面中. Rest读取展示 展示方式有2 一.              CBQW内容查询, 通过CBQW内容查询.分别通过设置itemstyle和header xsl ...

  8. someExperience

    // 面试题1 var name = 'World'; (function () { if (typeof name==='undefined') { var name = 'jack'; conso ...

  9. android Locat工作日志的使用

    #3.Logcat日志工具的使用 日志的等级: error:最高等级,错误信息,红色 warn:比较高,警告信息,橙色 debug:较高,调试信息,蓝色 info:一般,一般信息,绿色 verbose ...

  10. dorado需要的包

    创建dorado示例中心项目WEB-INF下的lib里的包有很多,包括连接数据库的完整的包,新建的项目,可以直接从这里面拷贝包. 当然如果需要连接mySql数据库,还需要手动导入mySql的包.