力扣p98验证二叉搜索树–中序遍历法
先看题目描述:
分析题目
要满足二叉搜索树的条件,我们可以发现如果一个树是二叉搜索树,它的中序遍历出来的结果是从小到大的,所以这一题我们完全可以使用中序遍历的方法,然后判断这个树结构结点值得大小关系。
比如示例1按中序遍历出来的结果应该是1 2 3。
代码部分
/**
* Definition for a binary tree node.
* 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
{
long pre = LONG_MIN; //因为需要满足题目所有测试数据,所以用的long数据类型。
public:
bool isValidBST(TreeNode* root)
{
if(root == nullptr) //如果为空,直接判断正确,因为空节点是合理的二叉搜索树
{
return true;
}
if(!isValidBST(root->left) || pre >= root->val) //访问左子树
{
return false;
}
//这里发现访问左子树和判断大小关系可以同时进行,便把下面的代码注释掉了。
// if(pre >= root->val) //判断当前节点和前一个节点的大小关系
// {
// return false;
// }
pre = root->val;
return isValidBST(root->right); //再访问右节点
}
};
代码提交结果如下图,如此观之,我的代码并不是最好的,当然还有其他的方法,可以去试一试。
题目总结
想到中序遍历和二叉搜索树这个关系很好,可以方便解题。当然还有其他解题思路,欢迎补充!