题解 | #牛群中的编号是否有效#
牛群中的编号是否有效
https://www.nowcoder.com/practice/2b4279d545124277a06a8e5eaa802375
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
二叉搜索树,递归
题目解答方法的文字分析
对于一个有效的二叉搜索树,我们需要满足以下条件:
- 当前节点的值大于其左子树中的所有节点值;
- 当前节点的值小于其右子树中的所有节点值;
- 左子树和右子树都必须是有效的二叉搜索树。
基于这些条件,我们可以使用递归的方式来判断二叉树是否是有效的二叉搜索树。对于每个节点,我们需要判断其值是否满足上述两个条件,然后递归地判断其左子树和右子树是否都是有效的二叉搜索树。在递归过程中,我们还需要传递一个范围,确保左子树的节点值小于当前节点值,右子树的节点值大于当前节点值。
例如,对于二叉树 {2, 1, 3},根节点为 2,它的左子树节点值 1 小于 2,右子树节点值 3 大于 2,同时递归地判断左子树 {1} 和右子树 {3} 也满足二叉搜索树的条件。
本题解析所用的编程语言
C++
完整且正确的编程代码
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
bool isValidBST(TreeNode* root) {
return isValidBSTHelper(root, nullptr, nullptr);
}
bool isValidBSTHelper(TreeNode* node, TreeNode* minNode, TreeNode* maxNode) {
if (!node) {
return true; // 空节点是有效的二叉搜索树
}
if ((minNode && node->val <= minNode->val) || (maxNode && node->val >= maxNode->val)) {
return false; // 节点值超出范围,不是有效的二叉搜索树
}
// 递归判断左子树和右子树
return isValidBSTHelper(node->left, minNode, node) && isValidBSTHelper(node->right, node, maxNode);
}
};
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题
SHEIN希音公司福利 222人发布
