TOP101题解 | BM34#判断是不是二叉搜索树#

判断是不是二叉搜索树

https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @author Senky
 * @date 2023.08.02
 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
 * @param root TreeNode类 
 * @return bool布尔型
 */
#include <math.h>
#include <stdbool.h>

#define INT_MIN (-pow(2, 31)  )
#define INT_MAX ( pow(2, 31)-1)

bool isValidBSTHelper(struct TreeNode* root, int  lower,  int upper) {
    if (root == NULL) {
        return true;
    }

    if (root->val <= lower || root->val >= upper) {
        return false;
    }

    return isValidBSTHelper(root->left, lower, root->val) && isValidBSTHelper(root->right, root->val, upper);
}

bool isValidBST(struct TreeNode* root) {
    return isValidBSTHelper(root, INT_MIN, INT_MAX);
}

TIPS:

在上述代码中,定义了一个辅助函数 isValidBSTHelper 来递归验证二叉树是否是二叉搜索树。

该函数接受三个参数:root 表示当前节点,lower 表示当前节点的下界,upper 表示当前节点的上界。

初始时,lower 为 INT_MIN,upper 为 INT_MAX,表示根节点没有上界和下界。

在函数中,我们首先判断当前节点的值是否在给定的范围内,如果不在范围内,则返回 false。然后递归验证左子树和右子树,并分别更新上界和下界。最终,如果左子树和右子树都是二叉搜索树且当前节点的值在给定的范围内,那么整棵树就是二叉搜索树,返回 true,否则返回 false。

#TOP101#
TOP101-BM系列 文章被收录于专栏

系列的题解

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务