Ошибка времени выполнения в коде: Предзаказ на Поступорядочение в дереве - PullRequest
0 голосов
/ 27 сентября 2019

Я написал простой код на python для заданного предзаказа дерева в Postorder обход дерева в бинарном дереве поиска.В моем компиляторе все работает нормально, но при загрузке его в онлайн-компилятор он показывает:

Ошибка времени выполнения: RunTomageback Runtime (последний вызов был последним): файл "/home/6cc826a55a3c8565281b5fa09fe07720.py", строка 31,в preorder_to_postorder (arr, n, 0) файл "/home/6cc826a55a3c8565281b5fa09fe07720.py", строка 24, в preorder_to_postorder файл preorder_to_postorder (справа, len (справа), счетчик), файл "/home/6cc826post_0orfo_p0_150_085_085_0805_5155_5155p085preorder_to_postorder (слева, len (слева), счетчик) Файл "/home/6cc826a55a3c8565281b5fa09fe07720.py", строка 21, в preorder_to_postorder Файл preorder_to_postorder (слева, лен (слева), счетчик)в preorder_to_postorder preorder_to_postorder (слева, len (слева), счетчик) Файл "/home/6cc826a55a3c8565281b5fa09fe07720.py", строка 21, в preorder_to_postorder preorder_to_postorder (слева, len (слева), counter655a5e5e5e5e5e5e5e5e5e5e5e )5e5e5e5e5e5e5a5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e тоже тоже21, в предorder_to_postorder preorder_to_postorder (слева, len (слева), счетчик) Файл "/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()

1 Ответ

0 голосов
/ 28 сентября 2019

Таким образом, существует некоторая проблема в логике вашего кода, когда

  1. N = 1
    вы получите значение от arr, его размер станет 0, и у вас нет проверки для этого

  2. Существует специальное условие, когда ваш код дает сбой, когда N = 3, тип ввода arr = [2,1,3], в идеале он должен вывести 1,3,2, но проверьтечто печатает ваш код.

Я не знаю, почему вы сделали это настолько сложным, используя переменную counter и parent, в то время как вы можете написать что-то простое, как этот

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

Старайтесь всегда заглядывать в угол при решении проблем.

...