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

以_specific格式_按级别顺序打印BFS(二叉树)

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

以_specific格式_按级别顺序打印BFS(二叉树)

一次只建立一个级别,例如:

class Node(object):  def __init__(self, value, left=None, right=None):    self.value = value    self.left = left    self.right = rightdef traverse(rootnode):  thislevel = [rootnode]  while thislevel:    nextlevel = list()    for n in thislevel:      print n.value,      if n.left: nextlevel.append(n.left)      if n.right: nextlevel.append(n.right)    print    thislevel = nextlevelt = Node(1, Node(2, Node(4, Node(7))), Node(3, Node(5), Node(6)))traverse(t)

编辑
:如果您希望在最大消耗的“辅助”内存中节省少量费用(永远不要在此类“辅助”内存中同时拥有所有此级别和下一个级别),那么您当然可以使用

collection.deque
代替
list
,并消耗当前(通过
popleft
)进行水平调整,而不是简单地循环。一次创建一个级别的想法(随着您消耗或迭代前一个级别)保持不变-
当您确实需要区分级别时,它比使用单个大双端队列和辅助信息更直接(例如深度或给定级别中剩余的节点数)。

但是,仅附加到列表(并在其上循环而不是“消耗”)的列表比双端队列的效率要高得多(并且如果您使用的是C ++解决方案,则类似地,std ::
vector仅

push_back
用于构建它,然后循环使用它比std ::deque效率更高。由于所有生成都是首先发生的,然后是所有迭代(或消耗),因此, 如果
内存受到严格限制,一个有趣的替代方法可能是使用一个列表来表示每个级别,然后
.reverse
在开始使用它(通过
.pop
调用)之前使用它-
我没有周围的大树可以通过测量进行检查,但是我怀疑这种方法仍会比实际上更快(并且实际上消耗更少的内存)
deque
(假设列表[[或std ::vector]]的基础实现实际上在对
pop
[[或
pop_back
]] 进行了几次调用之后确实会回收内存-当然,对于双端队列也有相同的假设;-)。



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

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

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