栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

广度优先遍历

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

广度优先遍历

广度优先搜索通常使用 队列 来实现,深度优先搜索使用 堆栈

Queue<Node> q = new Queue<Node>();q.Enqueue(root);while(q.Count > 0){    Node current = q.Dequeue();    if(current == null)        continue;    q.Enqueue(current.Left);    q.Enqueue(current.Right);    DoSomething(current);}

作为

null
出队后检查的替代方法,您可以在添加到队列之前进行检查。我没有编译代码,因此其中可能包含一些小错误。


与LINQ很好集成的更高级(但较慢)的版本:

public static IEnumerable<T> BreadthFirstTopDownTraversal<T>(T root, Func<T, IEnumerable<T>> children){    var q = new Queue<T>();    q.Enqueue(root);    while (q.Count > 0)    {        T current = q.Dequeue();        yield return current;        foreach (var child in children(current)) q.Enqueue(child);    }}

可以与以下

Children
属性一起使用
Node

IEnumerable<Node> Children { get { return new []{ Left, Right }.Where(x => x != null); } }

foreach(var node in BreadthFirstTopDownTraversal(root, node => node.Children)){   ...}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637477.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号