版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
1、 判断是否为二叉搜索树,二叉搜索树的基本特征是:左子树的所有节点都小于根节点,右子树的所有节点都大于根节点(假设没有相等的节点),也就是说左子树有上界,右子树有下界,其界为(无限小,无限大),对于根节点的左子树而言,其界为(无限小,根节点),对于根节点的右子树而言,其界为(根节点,无限大),随着层次的递增,下面的子树的上、下界也在更新,而且这个界越来越紧,如果一个二叉树不是二叉搜索树,那么它必然在某一层违反了上、下界,代码如下:
bool isValidBST(TreeNode* root) {return isValidBST(root,false,0,false,0); } /* hasMini=false代表下界为无线小,hasMaxi=false代表上界为无限小 */bool isValidBST(TreeNode* root,bool hasMini,int mini,bool hasMaxi,int maxi){if(!root)returntrue;//检验当前节点是否违反了上下界if(hasMini && root->val