您的位置:首页 > 其它

LeetCode 98. Validate Binary Search Tree

2017-03-18 21:14 537 查看

Description

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.

Example 1:

2
/ \
1   3


Binary tree
[2,1,3]
, return true.

Example 2:

1
/ \
2   3


Binary tree
[1,2,3]
, return false.

Solution

二叉搜索树的定义为:或者是一棵空树,或者是具有下列性质的 二叉树 : 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 其左、右子树也分别为二叉排序树 。因此直接采用遍历判断的方法,每次找到该节点左子树的最大值和右子树的最小值与当前节点比较,不满足条件则返回判断值
false
,满足再判断左右子树是否都满足条件。

/**
* 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) {
if(!root) return true;
if(root->left){
TreeNode *p = root->left;
while(p->right) p = p->right;
if(p->val>=root->val) return false;
}
if(root->right){
TreeNode *p = root->right;
while(p->left) p = p->left;
if(p->val<=root->val) return false;
}
return isValidBST(root->left)&&isValidBST(root->right);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode