我尝试提交代码问题,但平地机不接受我的成绩。我看不到测试用例,只看到指出未知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
该问题可能表明堆栈深度是一个潜在问题,因此递归不是处理大案件的可行策略。
但是我不确定。在重构代码之前,我会很高兴听到您对这个问题的意见。