LeetCode —98. Validate Binary Search Tree
验证一棵二叉树是否为二叉搜索树。
二叉搜索的性质:左子树所有节点value均小于根节点,右子树所有节点的value均大于根节点,且左右子树分别是一棵二叉搜索树。
从性质可知,二叉搜索树的中序遍历序列一定是一个升序序列。
从二叉树的中序序列判断是否二叉搜索树。
代码如下:
/**
* 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:
void mdfs(TreeNode* nowNode,vector<int> &nums)
{
if(nowNode->left!=NULL)
{
mdfs(nowNode->left,nums);
}
nums.push_back(nowNode->val);
if(nowNode->right!=NULL)
{
mdfs(nowNode->right,nums);
}
}
bool isValidBST(TreeNode* root) {
vector<int> nums;
if(root!=NULL)
mdfs(root,nums);
else
return true;
for(int i=0;i<nums.size()-1;i++)
{
if(nums[i]>=nums[i+1])
return false;
}
return true;
}
};