给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。算法:我们只需要知道BST的性质:一颗合法的BST树它的中序遍历一定是升序无重复数排列。为此,我们只需要将中序遍历的结果存入数组判断数组是否满足这一性质即可。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector res; void dfs(TreeNode* root){ if(root){ dfs(root->left); res.push_back(root->val); dfs(root->right); } } bool isValidBST(TreeNode* root) { if(!root)return true; dfs(root); for(int i=1;i