在检查是否为二叉搜索树时出现分段错误错误

时间:2018-11-27 15:23:03

标签: python linux algorithm

我尝试提交代码问题,但平地机不接受我的成绩。我看不到测试用例,只看到指出未知signal 11 (Time used: 0.81/10.00, memory used: 101203968/536870912.)

的错误消息

我知道Linux中的信号11代表分段错误。但是我无法理解我的代码出了什么问题。其他测试用例可以正常运行。所以我认为这主要是设计问题。

#!/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-是-th个顶点的键,是-th个顶点的左子项的索引,h是第-个顶点的右子项的索引。如果没有左或右子(或两者),则对应的或h(或两者)将等于-1。

输出:如果给定的二叉树是正确的二叉树(请参阅问题描述中的定义),则输出一个单词“ CORRECT”(不带引号)。否则,输出一个单词“不正确”(不带引号)。

Examples:

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

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

该问题可能表明堆栈深度是一个潜在问题,因此递归不是处理大案件的可行策略。

但是我不确定。在重构代码之前,我会很高兴听到您对这个问题的意见。

0 个答案:

没有答案