您的位置:首页 > 其它

【leetcode】Validate Binary Search Tree

2014-05-21 08:52 423 查看
问题:给定一棵二叉树,判断其是否为二叉查找树。

二叉查找树的要求:

1. 若根结点不空,且存在左孩子,则该结点的值大于左孩子的值(是大于,不是大于等于)。

2.若根结点不空,且存在右孩子,则该结点的值小于右孩子的值(是小于,不是小于等于)。

3.根结点的左右子树也是二叉查找树。

分析:提到二叉查找树,我们知道其中序遍历是递增有序的,也就是说,在中根遍历中,访问到的当前根结点的值要大于中序遍历中上一次访问到的结点的值,否则得到的就不是递增有序,即不是二叉查找树。但这里说到了一个“上次访问到的结点的值”,在访问中序遍历的第一个结点时,它并不存在先前的结点,或先前的值,这就要我们给定一个初始的“先前”值。另外一个注意的是,随着访问的进行,“上一次访问到的结点的值” 要被当前访问到的结点的值替代。

public:
bool visitTree(TreeNode *root, int& pre_value){
if(root == NULL)
return true;
bool left = visitTree(root->left, pre_value);
if(!left || pre_value >= root->val)
return false;
else
pre_value = root->val;
return visitTree(root->right, pre_value);

}
bool isValidBST(TreeNode *root) {
bool isBST = true;
if( NULL == root || (NULL == root->left && NULL == root->right))
return isBST;
int pre_value = 0x80000000;
return visitTree(root,pre_value);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: