小度给定你一棵拥有n个点的树,每次删去当前所有的叶子节点(即度数小于等于1的节点)和叶子节点所连接的边,直到所有的点都被删除了为止。 你需要对于每个点,求出它是第几次操作中被删除的。-笔试面试资料

这是qklbishe.com第15749 篇笔试面试资料
提供答案分析,通过本文《小度给定你一棵拥有n个点的树,每次删去当前所有的叶子节点(即度数小于等于1的节点)和叶子节点所连接的边,直到所有的点都被删除了为止。 你需要对于每个点,求出它是第几次操作中被删除的。-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

小度给定你一棵拥有n个点的树,每次删去当前所有的叶子节点(即度数小于等于1的节点)和叶子节点所连接的边,直到所有的点都被删除了为止。
你需要对于每个点,求出它是第几次操作中被删除的。
小度给定你一棵拥有n个点的树,每次删去当前所有的叶子节点(即度数小于等于1的节点)和叶子节点所连接的边,直到所有的点都被删除了为止。    你需要对于每个点,求出它是第几次操作中被删除的。 区块链毕设学生468857724号
n = int(input())  # 初始化邻接表 edge_table = dict() for k in range(n):     edge_table[k] = set()  # 输入边的信息 for _ in range(n-1):     u, v = [int(i)-1 for i in input().split()]     edge_table[u].add(v)     edge_table[v].add(u)  # 找到可删除的节点 rmv_lst = set() for i, elm in edge_table.items():     if len(elm) < 2:         rmv_lst.add(i)  res = [0]*n next_candidate = set() for cnt in range(1, 100000):                                    # 使用cnt记录这是第几次迭代     if len(rmv_lst) == 0:                                    # 如果没有可删除节点,就结束循环         break      next_candidate.clear()                   # 清空下一次可删除的节点的候选列表     for rmv in rmv_lst:         for other in edge_table[rmv]:             edge_table[other].remove(rmv)                # 移除与被删除节点相连的边             next_candidate.add(other)                    # 将候选节点加入到候选列表中         res[rmv] = cnt                                     # 记录此节点是第几次删除的      # 清空可删除节点列表,找出候选列表中可删除的节点放入可删除节点列表中     rmv_lst.clear()     for cddt in next_candidate:         # 还没有被删除,且边的个数小于2的节点为可删除节点         if res[cddt] == 0 and len(edge_table[cddt]) < 2:             rmv_lst.add(cddt)  print(" ".join(map(str, res)))

2021-09-06 23:47:05 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 小度给定你一棵拥有n个点的树,每次删去当前所有的叶子节点(即度数小于等于1的节点)和叶子节点所连接的边,直到所有的点都被删除了为止。 你需要对于每个点,求出它是第几次操作中被删除的。-笔试面试资料

提供最优质的资源集合

立即查看 了解详情