Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as follows: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys greater than the node's key. Both the left and right subtrees must also be binary search trees. confused what "{1,#,2,3}" means?
分析
题意是:验证二叉树是否是二叉搜索树
首先需要知道什么是二叉搜索树:
- 左节点小于根节点,右节点大于根节点;
- 左、右子树都是二叉搜索树;
很简单,只要左子树的最右节点小于根节点,右子树的最左节点大于根节点即可。
Code
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
/*
* 二叉搜索树的特点是左节点小于根节点,右子树大于根节点;左右子树也是二叉搜索树
*
* */
bool isValidBST(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(!root) return true;
if(!(root->left) && !(root->right)) return true;
TreeNode *mostLeftOfRchild , *mostRightOfLchild;
mostRightOfLchild = root->left;
while(mostRightOfLchild && (mostRightOfLchild->right) )
mostRightOfLchild = mostRightOfLchild->right;
if(mostRightOfLchild&&(mostRightOfLchild->val >= root->val) )
return false;
mostLeftOfRchild = root->right;
while(mostLeftOfRchild && (mostLeftOfRchild->left) )
mostLeftOfRchild = mostLeftOfRchild->left;
if(mostLeftOfRchild&&(mostLeftOfRchild->val <= root->val) )
return false;
return isValidBST(root->left)&&isValidBST(root->right);
}
};