我的解决方案中报告错误,以查找树的直径

问题描述

我尝试解决一个挑战,要求在python 3.0中要求树的直径(不一定是二叉树)。挑战实际上是找到一棵树的“周长”,这基本上是一棵树的直径(最长路径的长度)乘以3。

我创建了一个邻接表,并在树上运行了深度优先搜索(DFS),存储了子树的最大两个高度以及迄今为止遇到的最大直径。我认为我的逻辑很正确,但我似乎找不到代码问题。

codeforces编译器出现此错误

对于PyPy 3.6,“超出测试用例1的内存限制”
适用于Python 3.7的“测试用例4的运行时错误

但是我自己找不到代码产生错误的任何测试用例。

问题参考:https://codeforces.com/gym/102694/problem/A

我的代码

import sys,math
sys.setrecursionlimit(10**7)
def get_int(): # returns a list of integers after taking an input
    return list(map(int,sys.stdin.readline().strip().split()))

def dfs(adj_list,u):
    global visited
    d,h=0,[0,0] #Diameter,Maximum two heights.
    # print(u)
    if adj_list[u]==[]:
        # print(0,0)
        return 0,0
    else:
        for v in adj_list[u]:
            if visited[v]==True:
                continue
            else:
                visited[v]=True
                tmp_d,tmp_h=dfs(adj_list,v)
                d=max(d,tmp_d)
                tmp_h+=1
                if tmp_h>h[1]:
                    if tmp_h>h[0]:
                        h[1],h[0]=h[0],h[1]
                        h[0]=tmp_h
                    else:
                        h[1]=tmp_h
        d=max(h[0]+h[1],d)
        # print(d,h[0])
        return d,h[0]

if __name__ == "__main__":
    N=int(input().strip())
    adj_list=[[] for _ in range(N+1)] #Stores the adjacency list
    adj_list[0]=None
    root=1
    for _ in range(N-1):
        a,b=get_int()
        adj_list[a].append(b) 
        adj_list[b].append(a)
    visited=[False]*(N+1)
    visited[1]=True
    print(3*dfs(adj_list,root)[0])   

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)