PAT1004 Counting Leaves Python DFS

题目大概意思就是统计一个树中每一层叶节点的个数。
节点编号从01开始,程序将其转化为从1开始。最终提交结果(27/30)
第五个测试点就是不通过!求好心人解答。
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184
在这里插入图片描述
在这里插入图片描述

用深度优先搜索遍历整棵树,树采用map存储
def main():
  G ={}
  level = [0] * 101
  visted = [0] * 101
  def dfs(node, degree):
    visted[node] = 1
    if G.get(node, -1) == -1:     # 没有子节点
      level[degree] += 1
      return
    for child in G[node]:          # dfs遍历当前节点的所有子节点
      if visted[child] == 0:
        dfs(child, degree+1)
  ##########      
  N, M = list(map(int, input().split(" ")))
  if N == 1:                       # 只有一个节点直接输出1
    print(1)
  else:                          
   # 初始化树
    for _ in range(M):
      node, k, *child_nodes  = list(map(int, input().split(" ")))
      G[node] = child_nodes
      
    dfs(1, 0)     # 从根节点开始遍历
    
    leaves = N - M
    count = 0
    result = ''
    for num in level:
      result += str(num) + ' '
      count+=num
      if count >= leaves:
        break
    print(result.strip())    # 去除首尾的空格
    return 0
if __name__ == '__main__':
  main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值