LeeCode 98. 验证二叉搜索树
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
提示:
- 树中节点数目范围在
[1, 104]
内 -231 <= Node.val <= 231 - 1
答案&测试代码:
void testLeeCode98() { // 验证二叉搜索树/*** 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:bool isValidBST(TreeNode* root) {vector<int> vec;getOrder(root, vec); // 如果是由小到大的顺序,则为二叉搜索树for (auto it = vec.begin() + 1; it != vec.end(); ++it) {if (*it <= *(it - 1)) { // 当前元素 <= 前一个元素。 迭代器解引用得到元素值,有点像指针return false;}}return true;}private:void getOrder(TreeNode* node, vector<int>& vec) {if (node) {getOrder(node->left, vec);vec.push_back(node->val);getOrder(node->right, vec);}}};// 测试代码:TreeNode node2(2), node1(1), node3(3);node2.left = &node1;node2.right = &node3;Solution solution;std::cout << "isValidBST? " << solution.isValidBST(&node2) << endl;
}
打印:
ok,提交到LeeCode:
ok.