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;
}