2021-02-21 验证二叉搜索树

题目 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

解1 中序遍历

由于二叉搜索树的中序遍历一定是一个升序的数组,因此中序遍历二叉树,并通过设置一个全局变量pNode记录遍历到的每个结点的上一个结点,如果pNode值 >= root的值,则说明不是二叉搜索树。
另外,在设置一个全局变量flag,判断遍历过程种是否右上述所说情况,若有,则停止遍历,一路返回false。

class Solution {
    bool flag = true;
    TreeNode* pNode = NULL;
public:
    bool isValidBST(TreeNode* root)
    {
        if(flag == false) return false;
        if(root == NULL) return true;
        if(root->left) isValidBST(root->left);
        if(pNode && root->val <= pNode->val)
            flag = false;
        pNode = root;
        if(root->right) isValidBST(root->right);
        return flag;
    }
};

解2 给出上下界值

class Solution {
public:
    bool isValidBST(TreeNode* root)
    {
    	//给出极限值
        return getSolution(root , LONG_MIN , LONG_MAX);
    }
    bool getSolution(TreeNode* root , long lower , long upper)
    {
        if(root == NULL) return true;
       	//如果不在范围内则返回false
        if(root->val <= lower || root->val >= upper)
            return false;
        //处理左子树,上值为该结点值
        //处理右子树,下值值为该结点值
        //返回两个相与的值
        return getSolution(root->left,lower , root->val) && getSolution(root->right,root->val , upper);
    }
};
weixin028基于微信小程序小说阅读器设计+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值