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

Python 我的解决方案中报告的查找树直径的错误,python,tree,pypy,Python,Tree,Pypy,我尝试在Python3.0中解决一个要求树(不一定是二叉树)直径的问题。实际的挑战是找到一棵树的“周长”,它基本上是一棵树的直径(最长路径的长度)乘以3 我创建了一个邻接列表,并在树上运行了深度优先搜索(DFS),存储了两个子树的最大高度和到目前为止遇到的最大直径。我认为我的逻辑相当正确,但我似乎找不到代码的问题 codeforces编译器出现以下错误: PyPy 3.6的“测试用例1超出内存限制” Python 3.7的“测试用例4上的运行时错误” 但是我自己找不到任何代码产生错误的测试用例

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

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

codeforces编译器出现以下错误:

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

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

问题参考:

我的代码:

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])   

欢迎请更新您的问题:代码不应作为图像发布。在问题中键入代码,并使用工具按钮设置其格式。如果您遇到运行时错误,您至少应该提到该错误的细节,以及发生错误的行(堆栈跟踪)。链接后面不应该有任何重要信息。我已经按照您的要求发布了代码本身,但我无法确定引发错误的行,因为它与我提出的TCs一起工作。您应该在问题中添加任务的描述。它不应该在链接后面。本质也是:直径的定义是什么?最常见的定义是最长路径上的节点数,而代码似乎在计算边数。还有,为什么要乘以3?这在你的问题中并不清楚。此外,不要使用“非零退出代码”的“测试用例”的缩写。后者甚至过于模糊,无法帮助任何人。提到确切的错误信息。问题要求你找到一棵树的周长,它基本上是一棵树的直径(最长路径的长度)乘以3。为了回答您的第二个问题,codeforces编译器显示的全部内容是:(“PyPy 3.6的测试用例1超出了内存限制”)和((“Python 3.7的测试用例4上的运行时错误”),我再精确不过了,因为编译器没有显示准确的错误消息。我认为您没有正确复制错误消息:“超出内存限制”可能是“超出内存限制”。您能否准确地回答,并编辑问题(我已经为您做了,但请在必要时更正)。