问题描述:

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

    3
/ \
9 20
/ \
15 7

return its level order traversal as:

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

算法分析:三种方法。这道题和普通的层序遍历不一样的地方就是,需要每层单独输出。因此可以考虑用来两个队列,每个队列存放不同层的节点。我自己写的代码有重复的结构,并不友好。参考网上,其实将第二个队列赋值给第一个队列就行,就不会有重复代码了。也无需考虑队列空的情况了。第三种方法其实就是按层遍历的一种思想,是第二种方法的优化。

public class BinaryTreeLevelOrderTraversal
{
public List<List<Integer>> levelOrder(TreeNode root)
{
List<List<Integer>> res = new ArrayList<>();
if(root == null)
{
return res;
}
Deque<TreeNode> queue1 = new ArrayDeque<>();
Deque<TreeNode> queue2 = new ArrayDeque<>();
queue1.offer(root);
while(!queue1.isEmpty() || !queue2.isEmpty())
{
List<Integer> list1 = new ArrayList<>();
while(!queue1.isEmpty())
{
TreeNode temp = queue1.poll();
if(temp.left != null)
{
queue2.offer(temp.left);
}
if(temp.right != null)
{
queue2.offer(temp.right);
}
list1.add(temp.val);
}
if(list1.size() != 0)//队列空的时候,list1的大小为0
res.add(list1);
List<Integer> list2 = new ArrayList<>();
while(!queue2.isEmpty())
{
TreeNode temp = queue2.poll();
if(temp.left != null)
{
queue1.offer(temp.left);
}
if(temp.right != null)
{
queue1.offer(temp.right);
}
list2.add(temp.val);
}
if(list2.size() != 0)
res.add(list2);
} return res;
} public List<List<Integer>> levelOrder2(TreeNode root)
{
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
if(root == null)
{
return res;
} ArrayDeque<TreeNode> curr = new ArrayDeque<>();
ArrayDeque<TreeNode> next = new ArrayDeque<>(); curr.offer(root); while(!curr.isEmpty())
{
TreeNode temp = curr.poll();
if(temp.left != null)
{
next.offer(temp.left);
}
if(temp.right != null)
{
next.offer(temp.right);
} list.add(temp.val); if(curr.isEmpty())
{
res.add(list);
list = new ArrayList<Integer>();
curr = next;
next = new ArrayDeque<>();
}
} return res;
} public List<List<Integer>> levelOrder3(TreeNode root)
{
List<List<Integer>> res = new ArrayList<>(); if(root == null)
{
return res;
}
ArrayList<TreeNode> arr = new ArrayList<>();
arr.add(root);
while(!arr.isEmpty())
{
List<Integer> list = new ArrayList<>();
ArrayList<TreeNode> temp = new ArrayList<>();
for (TreeNode node : arr)
{
list.add(node.val);
if(node.left != null)
{
temp.add(node.left);
}
if(node.right != null)
{
temp.add(node.right);
}
}
res.add(list);
arr = temp;
} return res;
} public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>(); Deque<TreeNode> curr = new ArrayDeque<>();
Deque<TreeNode> next = new ArrayDeque<>(); if(root == null)
{
return res;
} curr.offer(root);
while(! curr.isEmpty())
{
TreeNode temp = curr.poll(); if(temp.left != null)
{
next.offer(temp.left);
}
if(temp.right != null)
{
next.offer(temp.right);
} list.add(temp.val); if(curr.isEmpty())
{
res.add(list);
list = new ArrayList<>();
curr = next;
next = new ArrayDeque<>();
}
} List<List<Integer>> reverseRes = new ArrayList<>();
for(int i = res.size()-1; i >= 0; i --)
{
reverseRes.add(res.get(i));
}
return reverseRes;
}
}

  

Binary Tree Level Order Traversal,层序遍历二叉树,每层作为list,最后返回List<list>的更多相关文章

  1. LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树

    Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...

  2. 102. Binary Tree Level Order Traversal ------层序遍历

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

  3. LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)

    翻译 给定一个二叉树,返回从下往上遍历经过的每一个节点的值. 从左往右,从叶子到节点. 比如: 给定的二叉树是 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 返回它从下 ...

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

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

  5. LeetCode OJ:Binary Tree Level Order Traversal II(二叉树的层序遍历)

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

  6. LeetCode 107. Binary Tree Level Order Traversal II (二叉树阶层顺序遍历之二)

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

  7. LeetCode 102. 二叉树的层次遍历(Binary Tree Level Order Traversal) 8

    102. 二叉树的层次遍历 102. Binary Tree Level Order Traversal 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 每 ...

  8. [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二

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

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

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

  10. [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, ...

随机推荐

  1. Android 使用动画效果后的控件位置处理 类似系统通知栏下拉动画

    Android的动画的使用,请参考.Android的动画,在设计方面,我有点不太理解,觉得这样搞很怪,因为在控件动画后,即使设置了停留在动画结束时的位置,我们也确实看到了控件停在那个位置,但其实该控件 ...

  2. JavaScript获取地址栏的参数!

    第一种方式:手动解析 “location”对象 console.log(window.location); 使用这个对象做跳转: window.location.href=""; ...

  3. 表格table列宽度控制<colgroup>

    <colgroup> 标签用于对表格中的列进行组合,以便对其进行格式化. 通过使用 <colgroup> 标签,可以向整个列应用样式,而不需要重复为每个单元格或每一行设置样式. ...

  4. php 判断变量函数

    1.isset功能:判断变量是否被初始化 判断变量是否被定义了 2.empty功能:检测变量是否为"空" 说明:任何一个未初始化的变量.值为 0 或 false 或 空字符串&qu ...

  5. OA之框架的搭建

    1.使用框架可以有效的解决耦合性过高的问题,减少代码修改的程度,同时方便添加新的功能.首先创建出基本的几个类库.这个框架就是使用基本的逻辑分层三层架构,然后进一步再使用接口对每个逻辑中的类库调用进行解 ...

  6. Cisco设备开启telnet登录

    思科设备怎么开启telnet登录 configuration line vty 0 4SW1(config-line)#transp input telne

  7. LightBGM之train

    用于模型的训练 1.说明: lightgbm.train(params, train_set, num_boost_round=100, valid_sets=None, valid_names=No ...

  8. sosi-statistics

    set echo offset scan onset lines 150set pages 66set verify offset feedback offset termout offcolumn ...

  9. Caocao's Bridges---hdu4738(桥)

    http://acm.hdu.edu.cn/showproblem.php?pid=4738 题就是求出所有的桥,然后输出桥的权值的最小值. 如果一开始是不连通的,输出0. 图有重边,需要处理, 不能 ...

  10. Mirror--镜像相关操作

    其他相关操作1. 关闭镜像--关闭镜像USE [master]GOALTER DATABASE Demo1 SET PARTNER OFFGO  2. 证服务器--移除见证服务器USE [master ...