Ошибка ошибки сегментации при проверке, является ли это двоичным деревом поиска или нет - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь отправить проблему с кодом, но грейдер не принимает мой результат.Я не вижу тестовый пример, я вижу только сообщение об ошибке, в котором указано неизвестное signal 11 (Time used: 0.81/10.00, memory used: 101203968/536870912.)

Я знаю, что в сигнале № 11 в Linux обозначена ошибка сегментации.Но я не могу понять, что не так с моим кодом.Другие тестовые случаи выполняются без проблем.Поэтому я думаю, что это в основном проблема проектирования.

#!/usr/bin/python3

import sys, threading

sys.setrecursionlimit(10**7) # max depth of recursion
threading.stack_size(2**25)  # new thread will get stack of such size

def IsBinarySearchTree(tree):
  # Implement correct algorithm here
  min = -sys.maxsize
  max = sys.maxsize

  def is_bst_until(idx_node,maxi,mini):
    if idx_node == -1:
      return True

    node = tree[idx_node]
    key = node[0]
    idx_left = node[1]
    idx_right = node[2]

    #print('max',maxi, "min", mini)

    if (key>maxi) or (key<mini):
      #print("False", key, maxi,mini)
      return False

    return (is_bst_until(idx_right, maxi, key+1)) and (is_bst_until(idx_left, key-1, mini))

  #print(tree)
  if len(tree) == 0:
      return True
  return is_bst_until(0, max, min)


def main():
  nodes = int(sys.stdin.readline().strip())
  tree = []
  for i in range(nodes):
    tree.append(list(map(int, sys.stdin.readline().strip().split())))
  if IsBinarySearchTree(tree):
    print("CORRECT")
  else:
    print("INCORRECT")

threading.Thread (target = main) .start () Входные данные: Первая строка содержит количество вершин ?.Вершины дерева пронумерованы от 0 до ? − 1.Вершина 0 является корнем.Следующие ? строки содержат информацию о вершинах 0, 1, ..., ? - 1 по порядку.Каждая из этих строк содержит три целых числа ????, ????? и ???h?? - ???? является ключом ver-й вершины, ????? является индексом левого потомка ?-й вершины, а ???h?? является индексом правого потомкаver-я вершина.Если у ? нет левого или правого потомка (или обоих), соответствующие ????? или ???h?? (или оба) будут равны -1.

Вывод: Если данное двоичное дерево является правильным деревом двоичного поиска(см. определение в описании проблемы), выведите одно слово «ПРАВИЛЬНО» (без кавычек).В противном случае выведите одно слово «НЕПРАВИЛЬНО» (без кавычек).

Examples:

3
1 1 2
2 -1 -1
3 -1 -1
INCORRECT

3
2 1 2
1 -1 -1
3 -1 -1
CORRECT

Проблема может указывать на то, что глубина стека является потенциальной проблемой, и, следовательно, рекурсия не является жизнеспособной стратегией для обработки больших случаев.

Но я не уверен.Буду признателен за ваши мнения по поводу этой проблемы, прежде чем рефакторинг кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...