中序遍历得有序数组
判断是否二叉搜索树
不能简单的用左子节点和右子节点比较
而要用左子树的最大值和右子树的最小值与根节点比较
现在限定根节点的取值范围
min.val<=root.val<=max.val
通过根节点,根节点能取到的最小值,根节点能取到的最大值进行判断
bool isvalidBST(TreeNode *root,TreeNode *min,TreeNode *max)
{
}
那么当根节点的值超过限制,就说明不是BST
//根节点小于最小值了
if(min!=NULL&&root->val<min) return false;
//根节点大于最大值了
if(max!=NULL&&root->val>max) return false;
确定了根节点的取值范围是min~max,那么
那么root的左右子树应该满足:
左子树的最大值<=root
右子树的最小值>=root
return isvalidBST(root->left,min,root);&&isvalidBST(root->right,root,max);
通过增加函数参数,对数值限制
增删改查
void BSToper(TreeNode *root,target)
{
if(root->val==target)
{
//找到了目标点,要进行什么操作
}
else if(root->val<target)
{
BSToper(root->right,target);
}
else
{
BSToper(root->left,target);
}
}