下面的函数能正确判断一棵树是不是二叉排序树(左边的数字要比当前数字小,右边的数字要比当前数字大)。
bool isBST(TreeNode* root, int minVal, int maxVal) {
if (!root) return true;
if (root->val <= minVal || root->val >= maxVal)
return false;
return isBST(root->left, minVal, root->val) &&
isBST(root->right, root->val, maxVal);
}逻辑代数运算:与(∧/×)、或(∨/+)、非(┐/¬)。德摩根律:┐(A∧B)=┐A∨┐B,┐(A∨B)=┐A∧┐B。
注意德摩根律的正确应用:┐(A∧B)=┐A∨┐B,┐(A∨B)=┐A∧┐B。C++中逻辑运算符有短路求值特性。
【考点】二叉排序树定义|递归遍历|参数传递
GESP 六级「数据结构」模块,二叉树专题。命题人卡住的是"以为递归参数会共享"的误区——六级考生常把递归当循环,误以为minVal/maxVal是全局状态,其实C++里是值传递,每层递归各自独立。