今天和大家聊的问题叫做 验证二叉搜索树,我们先来看题面:
https://leetcode-cn.com/problems/validate-binary-search-tree/
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node's key.
The right subtree of a node contains only nodes with keys greater than the node's key.
Both the left and right subtrees must also be binary search trees.
题意
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
样例
解题
我们都知道二叉搜索树:中序遍历为严格的递增序列。所以我们可以使用中序遍历的递归遍历这个二叉树,并且实时更新当前中序遍历到的最大值,如果正在判断的节点的val不大于这个实时的最大值,那就说明这个二叉树的中序遍历不是严格递增的,继而判定这个二叉树不是二叉搜索树。
class Solution { public: long long maxValue = LLONG_MIN;//中序遍历的当前最大值 bool isValidBST(TreeNode* root) { if (root == NULL){ return true; } if (!isValidBST(root->left)){//首先判断左子树是否是搜索二叉树 return false; } if (root->val <= maxValue){//如果发现不大于之前的遇到的最大值,说明中序遍历不是严格的递增 return false; } maxValue = root->val;//更新中序遍历到此时,遇到的最大值 if (!isValidBST(root->right)){//首先判断右子树是否是搜索二叉树 return false; } return true; } };
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。