Leetcode98
链接:力扣 。
题目:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例1:
输入:root = [2,1,3]
输出:true
示例2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:The root node's value is 5 but its right child's value is 4
思路:
要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。
有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。
参考代码:
/**
* 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 {
public:
void in_order(TreeNode* root, vector<int> &nums) {
if (root == nullptr) {
return;
}
in_order(root->left, nums);
nums.push_back(root->val);
in_order(root->right, nums);
}
bool isValidBST(TreeNode* root) {
vector<int> nums;
nums.clear();
in_order(root, nums);
for (int i = 1; i < nums.size(); i++) {
if (nums[i] <= nums[i - 1]) {
return false;
}
}
return true;
}
};