Kiểm tra xem 1 cây có phải là cây BST hay không

Xin chào mọi người, em đang học python. Như đề bài, em làm bài này khá ổn, ngoài trừ việc nó chạy sai rồi, :))) nộp lên system thì nó bảo là Unknown signal 11, nghĩa là code này đã truy cập mảng ngoài sức chứa của nó, ví dụ: list = [0, 1] thì lỗi trên nghĩa là: em đã truy cập list[2] chẳng hạn. Nhưng mà, em đã làm bài này bằng c++ rồi, code cũng y hệt, em thử code lại bằng c++ rồi nộp lên system thì nó pass, mà python thì nó lại bị lỗi. Em không biết tại sao hết, mọi người xem và chỉ giúp em với.
ví dụ input:
3
2 1 2
2 -1 -1
3 -1 -1
Nghĩa là có 3 node, a b c lần lượt là key, left, right, trong đó key là giá trị của node, left, right là index của node trái hoặc phải tiếp theo trong mảng.


#!/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

inf_value = 2147483648

def IsBST(tree, i, min, max):
    if tree[i][0] < min or tree[i][0] >= max:
        return False
    if tree[i][1] == -1 and tree[i][2] == -1:
        return True
    elif tree[i][1] == -1:
        return IsBST(tree, tree[i][2], tree[i][0], max)
    elif tree[i][2] == -1:
        return IsBST(tree, tree[i][1], min, tree[i][0])
    else:
        return IsBST(tree, tree[i][1], min, tree[i][0]) and IsBST(tree, tree[i][2], tree[i][0], max)

def IsBinarySearchTree(tree):
    # Implement correct algorithm here
    return IsBST(tree, 0, -inf_value, inf_value) if len(tree) != 0 else True

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()
// Assignment4Problem3.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <algorithm>
#include <vector>
#include <limits.h>
using namespace std;

bool IsBST(const vector<vector<int>> &tree, int temp, long long min, long long max)
{
	if (tree[temp][0] < min || tree[temp][0] >= max)
		return false;
	if (tree[temp][1] == -1 && tree[temp][2] == -1)
		return true;
	else if (tree[temp][1] == -1)
		return IsBST(tree, tree[temp][2], tree[temp][0], max);
	else if (tree[temp][2] == -1)
		return IsBST(tree, tree[temp][1], min, tree[temp][0]);
	else return IsBST(tree, tree[temp][1], min, tree[temp][0]) && IsBST(tree, tree[temp][2], tree[temp][0], max);
}

bool IsBinarySearchTree(const vector<vector<int>>& tree) {
	// Implement correct algorithm here
	if (tree.size() == 0)
		return true;

	return IsBST(tree, 0, -10000000000, 10000000000);
}

int main() {
	int nodes;
	cin >> nodes;
	vector<vector<int>> tree;
	for (int i = 0; i < nodes; ++i)
	{
		int key, left, right;
		cin >> key >> left >> right;
		vector<int> temp;
		temp.push_back(key);
		temp.push_back(left);
		temp.push_back(right);
		tree.push_back(temp);
	}
	if (IsBinarySearchTree(tree))
	{
		cout << "CORRECT" << endl;
	}
	else {
		cout << "INCORRECT" << endl;
	}
	return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?