猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
非递归深度优先搜索算法
我正在寻找一种针对非二叉树的非递归深度优先搜索算法。很感谢任何形式的帮助。
精慕HU
浏览 791
回答 3
3回答
HUH函数
DFS:list nodes_to_visit = {root};while( nodes_to_visit isn't empty ) { currentnode = nodes_to_visit.take_first(); nodes_to_visit.prepend( currentnode.children ); //do something}BFS:list nodes_to_visit = {root};while( nodes_to_visit isn't empty ) { currentnode = nodes_to_visit.take_first(); nodes_to_visit.append( currentnode.children ); //do something}两者的对称性很酷。更新:如前所述,take_first()删除并返回列表中的第一个元素。
0
0
0
繁华开满天机
您将使用一个堆栈来保存尚未访问的节点:stack.push(root)while !stack.isEmpty() do node = stack.pop() for each node.childNodes do stack.push(stack) endfor // …endwhile
0
0
0
皈依舞
如果您有指向父节点的指针,则无需额外的内存即可完成操作。def dfs(root): node = root while True: visit(node) if node.first_child: node = node.first_child # walk down else: while not node.next_sibling: if node is root: return node = node.parent # walk up ... node = node.next_sibling # ... and right请注意,如果子节点存储为数组而不是通过同级指针存储,则下一个同级可以找到:def next_sibling(node): try: i = node.parent.child_nodes.index(node) return node.parent.child_nodes[i+1] except (IndexError, AttributeError): return None分享编辑如果您有指向父节点的指针,则无需额外的内存即可完成操作。def dfs(root): node = root while True: visit(node) if node.first_child: node = node.first_child # walk down else: while not node.next_sibling: if node is root: return node = node.parent # walk up ... node = node.next_sibling # ... and right请注意,如果子节点存储为数组而不是通过同级指针存储,则下一个同级可以找到:def next_sibling(node): try: i = node.parent.child_nodes.index(node) return node.parent.child_nodes[i+1] except (IndexError, AttributeError): return None分享编辑
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
算法
正则表达式,要怎麽从下一个字开始匹配,而不是从下一个词?
0 回答
scrapy 解析js代码或正则?
2 回答
算法与数据结构
数据结构中,与所使用的计算机无关的数据是什么?
1 回答
学完C语言之后是先学数据结构还是先学JAVA好呢?
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续