102. Binary Tree Level Order Traversal 广度优先遍历
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]
]
方案1,直接暴力枚举
public class Solution {
private readonly List<Tuple<int, int>> _list = new List<Tuple<int, int>>();
private int _maxDepth;
public IList<IList<int>> LevelOrder(TreeNode root)
{
IList<IList<int>> result = new List<IList<int>>();
GetAllNodes(root, );
for (int i = ; i <= _maxDepth; i++)
{
var temp = _list.Where(x => x.Item1 == i).Select(y => y.Item2).ToList();
result.Add(temp);
}
return result;
}
private void GetAllNodes(TreeNode node, int depth)
{
if (node == null)
return;
depth++;
if (_maxDepth < depth)
{
_maxDepth = depth;
}
_list.Add(new Tuple<int, int>(depth, node.val));
GetAllNodes(node.left, depth);
GetAllNodes(node.right, depth);
}
private void WriteTreeNode(TreeNode node)
{
if (node == null)
{
Console.WriteLine("node is null");
return;
}
Console.Write($"node is {node.val}");
if (node.left == null)
{
Console.Write(", node.left is null");
}
else
{
Console.Write($", node.left is {node.left.val}");
}
if (node.right == null)
{
Console.WriteLine(", node.right is null");
}
else
{
Console.WriteLine($", node.right is {node.right.val}");
}
}
}
方案2,通过队列,在不同的depth中间插入null
https://stackoverflow.com/questions/31247634/how-to-keep-track-of-depth-in-breadth-first-search
You don't need to use extra queue or do any complicated calculation to achieve what you want to do. This idea is very simple.
This does not use any extra space other than queue used for BFS.
The idea I am going to use is to add null at the end of each level. So the number of nulls you encountered +1 is the depth you are at. (of course after termination it is just level).
public IList<IList<int>> LevelOrder(TreeNode root)
{
Queue<TreeNode> queue = new Queue<TreeNode>(); IList<int> list = new List<int>();
IList<IList<int>> result = new List<IList<int>>(); if (root != null)
{
result.Add(list);
queue.Enqueue(root);
queue.Enqueue(null);
} while (queue.Count > )
{
var node = queue.Dequeue(); if (node == null)
{
queue.Enqueue(null);
if (queue.Peek() == null)
{
//You are encountering two consecutive `nulls` means, you visited all the nodes.
break;
}
else
{
list = new List<int>();
result.Add(list);
continue;
}
}
else
{
list.Add(node.val);
} Enqueue(queue, node.left);
Enqueue(queue, node.right);
} return result;
} private void Enqueue(Queue<TreeNode> tempQueue, TreeNode node)
{
if (node != null)
{
tempQueue.Enqueue(node);
}
}
这个的执行结果:
举例

队列情况如下
(初始状态)
1 null1
(1出队列,1的左右子结点进队列)
null1 2 3
(null1出队列,说明depth=1遍历结束。新的null2进队列,depth=2结束的标志位,同时continue)
2 3 null2
(2出队列,2的左右子结点进队列)
3 null2 4 5
(3出队列,3的左右子结点入队列,因为3没有子结点,所以没有新进入queue的结点)
null2 4 5
(null2出队列,说明depth=2遍历结束。null3进队列,标记着depth=3结束的标志位,同时continue)
4 5 null3
(4出队列,4的左右子结点入队列,因为4没有子结点,所有没有新进入queue的结点)
5 null3
(5出队列,5的左右子结点入队列,因为5没有子结点,所有没有新进入queue的结点)
null3
(null3出队列,说明depth=3的遍历结束。null4进队列,标记着depth=4结束的标志位。这个时候queue.peek()=null4,连续2个null,意味着遍历结束,直接跳出循环)
102. Binary Tree Level Order Traversal 广度优先遍历的更多相关文章
- 102. Binary Tree Level Order Traversal ------层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to righ ...
- [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, ...
- LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树
Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...
- 【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 ...
- [刷题] 102 Binary Tree Level Order Traversal
要求 对二叉树进行层序遍历 实现 返回结果为双重向量,对应树的每层元素 队列的每个元素是一个pair对,存树节点和其所在的层信息 1 Definition for a binary tree node ...
- 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, ...
- LeetCode 102. Binary Tree Level Order Traversal 二叉树的层次遍历 C++
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 【LeetCode】102. Binary Tree Level Order Traversal 二叉树的层序遍历 (Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https://lee ...
- 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, ...
随机推荐
- sql server得到某个数据库的所有表和所有字段
select b.name tablename,a.name as columnnamefrom sys.columns a,sys.objects b,sys.types cwhere a.obje ...
- html5-字体css
#div1{font-size: 50px;}#div2{font-size: 50%;}#div3{font-size: 300%}#div4{font-size: 3em;}#div5{font- ...
- UIView的背景颜色
一个UIColor代表一种颜色,通过UIColor的类方法,可以获得很多常用的颜色 + (UIColor *)blackColor; // 0.0 white 黑色 + (UIColor * ...
- 多线程:Operation(二)
1. Operation 设置依赖关系 先看看如何设置operation的依赖关系. 啥叫依赖关系?有啥用啊?打个比方咱们要做一个听音乐的付费App项目,需要经过登陆.付费.下载.播放四个步骤.其实一 ...
- 安装vm tools时出现如下问题 The path "/usr/bin/gcc" is not valid path to the
sudo suapt-get updateapt-get dist-upgradeapt-get install open-vm-tools-desktop fusereboot https://bl ...
- mongoDB的使用A
一.[连接mongo服务].[连接数据库].[连接集合] #一.[连接Mongo] import pymongo #方法一 client = pymongo.MongoClient(host='loc ...
- sqlyog下载
sqlyog下载(附注册码):http://www.onlinedown.net/soft/24926.htm
- RocketMQ 顺序消费只消费一次 坑
rocketMq实现顺序消费的原理 produce在发送消息的时候,把消息发到同一个队列(queue)中,消费者注册消息监听器为MessageListenerOrderly,这样就可以保证消费端只有一 ...
- VPS采用的几种常见技术(OVZ、Xen、KVM)介绍与对比
很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ.Xen.KVM.Xen和HVM与PV. 在+XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用 ...
- Android4.0 主线程不能访问网络异常解决办法
从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会 ...