Algorithm tree ----- DFS、BFS

    一个多叉树结构如下图所示:

 

  • 创建如图所示的数据结构,用镶套字典实现。
# 创建多叉树
d = {"x": {"a": {"b":{}, "c":{}, "d": {}}, "e":{"f":{"g": {}, "k": {}}}}}
  • 深度优化遍历
# dfs 递归实现
ans = -1
nodes = []
def dfs(d, deep):
    global ans
    if len(d.keys()) == 0:
        ans = max(ans, deep)
        return
    else:
        for k in d.keys():
            nodes.append(k)
            dfs(d[k], deep + 1)
# 调用
dfs(d, 0)
print("Tree depth: {}".format(ans))
print("Path: {}".format("->".join(nodes)))
## output:
## Tree depth: 4
## Path: x->a->b->c->d->e->f->g->k
# dfs 非递归,通过栈实现
ans = 0
nodes = []
def dfs(d):
    global ans
    stack = []
    key = list(d.keys())[0]
    stack.append(d)
    while len(stack):
        d = stack[-1]
        if len(list(d.values())[0]):
            ans += 1
        stack.pop()
        for k, v in d.items():
            r_v = list(v.items())
            r_v.reverse()
            for k2, v2 in dict(r_v).items():
                stack.append({k2: v2})
            nodes.append(k)
# 调用
dfs(d)
print("Tree depth: {}".format(ans))
print("Path: {}".format("->".join(nodes)))
## output:
## Tree depth: 4
## Path: x->a->b->c->d->e->f->g->k
  • 广度优先遍历
# bfs 非递归,通过队列实现
ans = 0
nodes = []
def bfs(d):
    global ans
    queue = []
    key = list(d.keys())[0]
    queue.append(d)
    while len(queue):
        d = queue[0]
        if {} not in queue:
            ans += 1
        queue.remove(d)
        for k, v in d.items():
            queue.append(v)
            nodes.append(k)
# 调用
bfs(d)
print("Tree depth: {}".format(ans))
print("Path: {}".format("->".join(nodes)))
## output
## Tree depth: 4
## Path: x->a->e->b->c->d->f->g->k

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值