精品网站建设,网站开发兼容问题,北京网站优化校学费,怎样申请建网站一、题目描述二、解题思路整体思路二叉搜索树的中序遍历序列是单调递增的#xff0c;我们可以根据这个原则来判断当前的二叉树是否为二叉搜索树。由于要借助中序遍历的方法#xff0c;所以我们借助递归来解决这个问题。具体思路考虑到空间的开销#xff0c;我们无需申请数组…一、题目描述二、解题思路整体思路二叉搜索树的中序遍历序列是单调递增的我们可以根据这个原则来判断当前的二叉树是否为二叉搜索树。由于要借助中序遍历的方法所以我们借助递归来解决这个问题。具体思路考虑到空间的开销我们无需申请数组来寄存中序遍历的序列可以设置一个全局变量pre来记录前一个数值辅助判断。(1)函数功能isValidBST函数用于判断以root为根节点的二叉树是否为二叉搜索树(2)递归出口当root为空节点时直接返回true(3)函数体1处理左子树判断左子树是否为二叉搜索树。当左子树不为二叉搜索树直接返回false进行左剪枝2处理当前节点。判断当前节点的值是否大于pre更新pre的值3处理右子树判断右子树是否为二叉搜索树。当右子树不为二叉搜索树直接返回false进行右剪枝。(4)返回leftcurright即可。三、代码实现
/*** 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 preLONG_MIN;
public:bool isValidBST(TreeNode* root) {//边界处理if(rootnullptr) return true;//处理左子树bool leftisValidBST(root-left);if(leftfalse) return false;//左剪枝//处理本身bool curtrue;if(root-valpre) curfalse;preroot-val;//处理右子树bool rightisValidBST(root-right);if(rightfalse) return false;//右剪枝return leftcurright;}
};