数据结构之深度优先,广度优先遍历

深度优先和广度优先遍历在树和图中应用最为普遍,思想也类似,因此放到一起来总结。

二叉树的深度优先广度优先遍历:

一棵二叉树(2,(2(3,4),3(4,5))),这是一棵满二叉树,一共有7个节点,根节点2,深度为3

数据结构定义如下:

class Node:
	def __init__(self, value=None, left = None, right = None):
		self.value = value
		self.left = left
		self.right = right

先根遍历

def preTraverse(tree):
	if(tree):
		print tree.value
		preTraverse(tree.left)
		preTraverse(tree.right)

后根遍历与中根遍历类似,就不写了,用的都是深度优先遍历

层序遍历,用的是广度优先遍历,需要额外一个队列作为临时变量保存每层的节点

def hiraTraverse(tree, queue_node):
	if len(queue_node)==0 & (tree is None):
		queue_node.append(tree)
	while len(queue_node)>0:
		node = queue_node.pop(0)
		print node.value
		if not node.left is None:
			queue_node.append(node.left)
		if not node.right is None:
			queue_node.append(node.right)

图的深度优先广度优先遍历:

图常用的存储方式包括邻接矩阵,邻接表等,这里以邻接矩阵为例

 

转载于:https://www.cnblogs.com/xiamaogeng/p/4461110.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值