代码中的运行时错误:中的前序到后序

2024-10-02 08:23:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了一个简单的代码,用于在二叉搜索树中给定树的前序到树的后序遍历。在我的编译器中,一切正常,但在将其上载到联机编译器时,它显示:

运行时错误: 运行时错误回溯(最后一次调用): 文件“/home/6cc826a55a3c8565281b5fa09fe07720.py”,第31行,在 前序到后序(arr,n,0) 文件“/home/6cc826a55a3c8565281b5fa09fe07720.py”,第24行,在预订单到后订单中 前序到后序(右、列(右)、计数器) 文件“/home/6cc826a55a3c8565281b5fa09fe07720.py”,第21行,在预订单到后订单中 前序到后序(左、长(左)、计数器) 文件“/home/6cc826a55a3c8565281b5fa09fe07720.py”,第21行,在预订单到后订单中 前序到后序(左、长(左)、计数器) 文件“/home/6cc826a55a3c8565281b5fa09fe07720.py”,第21行,在预订单到后订单中 前序到后序(左、长(左)、计数器) 文件“/home/6cc826a55a3c8565281b5fa09fe07720.py”,第21行,在预订单到后订单中 前序到后序(左、长(左)、计数器) 文件“/home/6cc826a55a3c8565281b5fa09fe07720.py”,第21行,在预订单到后订单中 前序到后序(左、长(左)、计数器) 文件“/home/6cc826a55a3

这是问题https://practice.geeksforgeeks.org/problems/preorder-to-postorder/0的链接 当我编译和测试代码时,它工作得很好,但是当我提交代码时,它以同样的方式显示了上面的错误,就像我在上面发布的那样。 请帮忙

这是我的密码:

def preorder_to_postorder(arr, n, counter):
    left = []
    right = []
    temp = arr.pop(0)
    parent.append(temp)
    if len(arr) == 1:
        while counter > 0:
            arr.append(parent.pop())
            counter -= 1
        for j in range(len(arr)):
            print(arr[j], end=" ")

    for i in range(0, n-1):
        if arr[i] < temp:
            left.append(arr[i])
        else:
            right.append(arr[i])

    if len(left) > 1:
        counter += 1
        preorder_to_postorder(left, len(left), counter)
    if len(right) > 1:
        counter += 1
        preorder_to_postorder(right, len(right), counter)

t = int(input())
parent = []
for k in range(t):
    n = int(input())
    arr = list(map(int, input().strip().split()))
    preorder_to_postorder(arr, n, 0)
    print()

Tags: 文件topy订单homelencounter计数器
1条回答
网友
1楼 · 发布于 2024-10-02 08:23:32

因此,在运行时,代码的逻辑存在一些问题

  1. N=1
    您将从arr弹出,其大小将变为0,并且您没有对此进行检查

  2. 当您的代码失败时,有一种特殊情况 当N=3时,arr=[2,1,3]种输入 理想情况下,它应该打印1,3,2,但检查您的代码正在打印什么

我不知道为什么您使用计数器和父变量使这变得如此复杂,而您可以编写这样简单的东西

def preorder_to_postorder(arr, n, counter):
    left=[]
    right=[]
    for i in range(1,n):
        if arr[i] < arr[0]:
            left.append(arr[i])
        else:
            right.append(arr[i])

    if len(left) > 0:
        preorder_to_postorder(left, len(left), counter)
    if len(right) > 0:
        preorder_to_postorder(right, len(right), counter)
    print(arr[0],end=' ')

t = int(input())
parent = []
for k in range(t):
    n = int(input())
    arr = list(map(int, input().strip().split()))
    preorder_to_postorder(arr, n, 0)
    print()

在解决问题的时候,总是尝试一些极端的情况

相关问题 更多 >

    热门问题