题目:http://oj.leetcode.com/problems/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.
题目翻译:
给定一个二叉树,确定它是否是一个有效的二叉查找树(BST)。
假定一个BST的定义如下:
一个节点的左子树只包含值小于该节点值的节点。
一个节点的右子树只包含值大于该节点值的节点。
左子树和右子树也必须是二叉查找树。
递归实现。如果节点为空则返回true。
C++实现:
/**
* 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) {
return isValidBST(root, INT_MIN, INT_MAX);
}
bool isValidBST(TreeNode *root, int min, int max)
{
if(root == NULL)
{
return true;
}
return root->val > min && root->val < max
&& isValidBST(root->left, min, root->val)
&& isValidBST(root->right, root->val, max);
}
};
Java实现:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isValidBST(TreeNode root) {
return isValidBST(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
public boolean isValidBST(TreeNode root, int min, int max) {
if (root == null) {
return true;
}
return root.val > min && root.val < max
&& isValidBST(root.left, min, root.val)
&& isValidBST(root.right, root.val, max);
}
}
Python实现:(python不支持重载)
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a boolean
def isValidBST(self, root):
return self.isValidBSTImpl(root, -2**31, 2**31 - 1)
def isValidBSTImpl(self, root, min, max):
if root == None:
return True
return root.val > min and root.val < max \
and self.isValidBSTImpl(root.left, min, root.val) \
and self.isValidBSTImpl(root.right, root.val, max)
感谢阅读,欢迎评论!