二叉树专题-验证二叉查找树

来源:互联网 发布:java按空格分割字符串 编辑:程序博客网 时间:2024/06/06 00:06

注意,题目中给的定义是严格小于,严格大于,不包含等于。

这样,每个位置的值实际上必须在一个区间内。可以用递归的先序遍历的方法,先判断根是否在对应区间内,再判断左子树与右子树。

举一个例子:


  对于根节点,任意取;向左,需要严格小于1,故区间变为[负无穷,1),向右,需要大于1,故区间变为(1,正无穷];走到4时,区间为(1,3),4不在这个区间内,即不是二叉查找树

  例子中的正无穷与负无穷只是用作分析,由于结构体中已定义了值为int类型,这里的负无穷与正无穷即int的最小值和最大值。

  只要区间允许,是可以取到int的最大和最小的,故为了包含边界,初始是用long的最大与最小来初始。

  依照先序遍历的递归写法,写出代码如下:

bool isValidBST(TreeNode *root) {        // write your code here        return isValidBST(root,LONG_MIN,LONG_MAX);    }    //用long是为了包含int的边界    bool isValidBST(TreeNode* T,long low,long high){        if(!T) return true;        if(T->val>=high || T->val<=low) return false;        return isValidBST(T->left,low,T->val) && isValidBST(T->right,T->val,high);    }



原创粉丝点击