Если дерево BST.тогда обход по порядку должен дать нам отсортированный массив.И если массив отсортирован, то данное дерево должно быть BST, тогда почему этот код не выполняется
Заранее спасибо
void getInorder(vector<int> &inorder, TreeNode* A){
if(A == NULL)
return;
getInorder(inorder,A->left);
//cout<<A->val<<" ";
inorder.push_back(A->val);
getInorder(inorder,A->right);
}
int Solution::isValidBST(TreeNode* A) {
//If it is a valid BST //Then its inorder Must be a sorted array;
vector<int> inorder;
if(A == NULL)
return 0;
getInorder(inorder,A);
// for(int a:inorder)
// cout<<a<<" ";
cout<<endl;
return is_sorted(inorder.begin(), inorder.end()) == true ? 1 : 0;
}
Выход 1: Это BST, 0: НеBST
Failing Test Case :
2
/ \
1 2
Его обход InOrder: 1,2,2 (отсортировано) MyCode O / P: 1, ожидаемое O / P: 0
Причина: (Это не BST, Поскольку Right Sub дерево должно иметь значение больше Root, в этом случае оно равно root)
Сбой для дублированных значений, если присутствует в некотором порядке.