深度遍历:
原则:从上到下,从左到右
逻辑(本质用递归):
1)、找根节点
2)、找根节点的左边
3)、找根节点的右边
class Node(object): def __init__(self, item=None, left=None, right=None): self.item = item self.left = left self.right = right d = Node("D") e = Node("E") b = Node("B", d, e) f = Node("F") g = Node("G") c = Node("C", f, g) a = Node("A", b, c) result = [] def deep_search(root): # 深度遍历 核心:递归 result.append(root.item) if root.left: deep_search(root.left) if root.right: deep_search(root.right) return "-->".join(result) print deep_search(a)
广度遍历:
核心:队列+递归
def wide_search(root, result=[]): if not result: result.append(root.item) if root.left: result.append(root.left.item) if root.right: result.append(root.right.item) if root.left: wide_search(root.left) if root.right: wide_search(root.right) return "-->".join(result) print wide_search(a)
以上这篇Python实现深度遍历和广度遍历的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
给定一个数组,构建二叉树,并且按层次打印这个二叉树
def deep(root): if not root: return print root.data deep(root.left) deep(root.right) if __name__ == '__main__': lookup(tree) deep(tree)
本文向大家介绍解释下深度优先遍历和广度优先遍历的区别及如何实现相关面试题,主要包含被问及解释下深度优先遍历和广度优先遍历的区别及如何实现时的应答技巧和注意事项,需要的朋友参考一下 1、深度优先采用堆栈结构,先进后出,所占的空间较小,执行时间较长; 2、广度优先采用队列结构先进先出,所占空间较大,执行时间短,空间换时间;
本文向大家介绍python遍历文件夹,指定遍历深度与忽略目录的方法,包括了python遍历文件夹,指定遍历深度与忽略目录的方法的使用技巧和注意事项,需要的朋友参考一下 背景 需要在文件夹中搜索某一文件,找到后返回此文件所在目录。用最常规的os.listdir()方式实现了一版,但执行时报错:递归超过最大深度。于是自己添加了点功能,之所有写此函数是为了让它适应不同的项目,因为有项目要找的文件在第一层
本文向大家介绍C#深度优先遍历实现全排列,包括了C#深度优先遍历实现全排列的使用技巧和注意事项,需要的朋友参考一下 假如让你说出123三个数字的全排列你可以很快说出来123,132,213,231,312,321,但是让你说出1~20总共20个数字的全排列是不是就没那么简单了呢?本篇我们就通过C#运用深度优先算法实现全排列 算法图例 假如有编号为1,2,3的三张扑克牌和编号为1,2,3的三个盒子,
广度优先搜索(BFS)算法以宽幅运动遍历图形并使用队列记住在任何迭代中发生死角时获取下一个顶点以开始搜索。 如在上面给出的示例中,BFS算法首先从A到B到E到F,然后到C和G,最后到D.它采用以下规则。 Rule 1 - 访问相邻的未访问顶点。 将其标记为已访问。 显示它。 将其插入队列中。 Rule 2 - 如果未找到相邻顶点,则从队列中删除第一个顶点。 Rule 3 - 重复规则1和规则2,直