验证二叉搜索树
给你一个二叉树的根节点 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/245516.html