验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:

输入:root = [2,1,3] 输出:true
示例 2:

输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
- 树中节点数目范围在
[1, 104]内 -231 <= Node.val <= 231 - 1
解题思路:
二叉搜索树的中序遍历结果是递增的,可以先采用数组存储中序遍历的结果,然后判定数组是否递增
1 /**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode() : val(0), left(nullptr), right(nullptr) {}
8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10 * };
11 */
12 class Solution {
13 public:
14 void inorder(TreeNode *root, vector<int> &ans) {
15 if (root == nullptr) {
16 return;
17 }
18 inorder(root->left, ans);
19 ans.push_back(root->val);
20 inorder(root->right, ans);
21 return;
22 }
23 bool isValidBST(TreeNode* root) {
24 if (root == nullptr) {
25 return false;
26 }
27 vector<int> ans;
28 inorder(root, ans);
29 int n = ans.size();
30 for (int i = 0; i < n - 1; i++) {
31 if (ans[i] >= ans[i + 1]) {
32 return false;
33 }
34 }
35 return true;
36 }
37 };
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/245516.html