# 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

 

示例 1:

输入:root = [2,1,3]
输出:true

示例 2:

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

 

提示:

以下程序实现了这一功能,请你填补空白处内容: ```cpp #include using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} }; class Solution { public: bool isValidBST(TreeNode *root) { stack stk; int prev = INT_MIN; bool first = true; while (!stk.empty() || root != nullptr) { if (root != nullptr) { stk.push(root); root = root->left; } else { root = stk.top(); stk.pop(); _______________________; } } return true; } }; ``` ## template ```cpp #include using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} }; class Solution { public: bool isValidBST(TreeNode *root) { stack stk; int prev = INT_MIN; bool first = true; while (!stk.empty() || root != nullptr) { if (root != nullptr) { stk.push(root); root = root->left; } else { root = stk.top(); stk.pop(); if (!first && prev >= root->val) { return false; } first = false; prev = root->val; root = root->right; } } return true; } }; ``` ## 答案 ```cpp if (!first && prev >= root->val) { return false; } first = false; prev = root->val; root = root->right; ``` ## 选项 ### A ```cpp if (first && prev >= root->val) { return false; } first = false; prev = root->val; root = root->right; ``` ### B ```cpp if (first || prev >= root->val) { return false; } first = false; prev = root->val; root = root->right; ``` ### C ```cpp if (!first || prev >= root->val) { return false; } first = false; prev = root->val; root = root->right; ```