Pytrhon实现深度优先搜索DFS 超级简单 BFS广度优先搜索,注释超级详细

文章展示了如何在Python中定义一个树类,并通过递归方法实现深度优先遍历和广度优先遍历。首先定义了一个简单的树节点类,接着创建了一个树实例并添加子节点。然后分别用递归函数实现了DFS和BFS,最后打印遍历结果。
摘要由CSDN通过智能技术生成

在这里插入图片描述
代码:

# 定义一个普通的树类
class Tree:
    def __init__(self, data):
        self.data = data
        self.children = []

    def get(self):
        return self.data
    
    def set(self):
        return self.data

    def addChild(self, child):
        self.children.append(child)

    def getChildren(self):
        return self.children
    
# 初始化一个树
tree = Tree(0)
# 添加三个子节点
tree.addChild(Tree(1))
tree.addChild(Tree(2))
tree.addChild(Tree(3))
children = tree.getChildren()
# 每个子节点添加两个子节点
children[0].addChild(Tree(4))
children[0].addChild(Tree(5))
children[1].addChild(Tree(6))
children[1].addChild(Tree(7))
children[2].addChild(Tree(8))
children[2].addChild(Tree(9))

result=[]
# 递归方式实现深度优先遍历
def depthFirstByRecursion(tree):
    # global result
    result.append(tree.data)
    print(result)
    children = tree.getChildren()
    for c in children:
        depthFirstByRecursion(c)
    # return result
depthFirstByRecursion(tree)
print(result)

# 递归方式实现广度优先遍历
def breadthFirstByRecursion(gen, index=0, nextGen=[], result=[]):   
    if type(gen) == Tree: # 表示根节点
        gen = [gen]
    result.append(gen[index].data) # 取出当前节点的值   
    children = gen[index].getChildren()   
    nextGen += children # 统计所有下一代节点
    if index == len(gen)-1: # 横向上没有其他节点,即到达最右侧节点
        if nextGen == []: # 表示没有子节点
            return
        else:             # 更新至下一代
            gen = nextGen
            nextGen = []
            index = 0
    else:
        index += 1 # 本层节点向右移动一个
    breadthFirstByRecursion(gen, index, nextGen,result)
    return result
print(breadthFirstByRecursion(tree))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值