我必须检查二叉树是否为二叉搜索树。这是我的代码,用于递归检查节点的键是否为
1)大于左侧子树的最大值
2)小于右侧子树的最小值
所有键都不同。
输入没问题,但是输入看起来像这样。
5
1 -1 1
2 -1 2
3 -1 3
4 -1 4
5 -1 -1
第一行包含顶点?的数量。树的顶点已编号
从0到-1。顶点0是根。
接下来的?行依次包含有关顶点0、1,...,?-1的信息。这些行中的每行都包含三个整数????,?????和???ℎ??-????是第ver个顶点的键,,是第?个顶点的左子元素的索引,???ℎ??是第ver个顶点的左子元素的索引。第个顶点。如果?没有
左或右子(或两者),相应的?????或???ℎ??(或两者)将等于-1。
约束:0≤?≤10 ^ 5; −2 ^ 31 ???<2 ^ 31 − 1; -1≤?????,???ℎ??≤?−1。保证输入表示有效的二叉树。
class Tree:
def read(self):
self.n = int(sys.stdin.readline())
self.key = [0 for i in range(self.n)]
self.left = [0 for i in range(self.n)]
self.right = [0 for i in range(self.n)]
for i in range(self.n):
[a, b, c] = map(int, sys.stdin.readline().split())
self.key[i] = a
self.left[i] = b
self.right[i] = c
return self.n
def isBinarySearchTree(self,index=0):
leftIndex=self.left[index]
rightIndex=self.right[index]
key=self.key[index]
if leftIndex==-1 and rightIndex==-1:
return key,key,True
if leftIndex!=-1:
left=self.isBinarySearchTree(self.left[index])
leftMin=left[0]
leftMax=left[1]
leftbool=left[2]
if rightIndex!=-1:
right=self.isBinarySearchTree(self.right[index])
rightMin=right[0]
rightMax=right[1]
rightbool=right[2]
if leftIndex==-1:
return min(key,rightMin), rightMax, key<=rightMin and rightbool
elif rightIndex==-1:
return leftMin, max(key,leftMax), key>=leftMax and leftbool
else:
return min(key,leftMin), max(key,rightMax), key>leftMax and key<rightMin and leftbool and rightbool
def main():
tree = Tree()
n=tree.read()
if n==0 or tree.isBinarySearchTree()[2]:
print("CORRECT")
else:
print("INCORRECT")
这是在线课程的一部分,我通过了所有提到的测试用例,但是它在测试器中显示了错误的答案,所以我不知道错误的用例。
您能帮我解决这个问题吗?
答案 0 :(得分:-2)
显然,问题只是堆栈溢出。我用这个来处理。
import sys, threading
sys.setrecursionlimit(10**7) # max depth of recursion
threading.stack_size(2**27) # new thread will get stack of such size
*above code*
threading.Thread(target=main).start()
增加堆栈大小解决了溢出问题。