leetcode 98. 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

一个二叉搜索树具有如下特征:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:

    2

   / \

  1   3

输出: true

示例 2:

输入:

    5

扫描二维码关注公众号,回复: 2388490 查看本文章

   / \

  1   4

     / \

    3   6

输出: false

解释: 输入为: [5,1,4,null,null,3,6]。

     根节点的值为 5 ,但是其右子节点值为 4 。

关键信息

1二叉搜索树的中序遍历是递增的,我们采用递归的到其中序变量结果

2不能采用全局变量,则需考虑递归函数中信息的传递

                   递归函数是一个函数(废话),函数则有 名,参数,返回值

                   所以需考虑利用参数或返回值完成本题

本人愚钝,起先只考虑了利用参数i传递中序前驱,用于比较其中序前驱与当前节点的大小关系,参数i在作为中序前驱的同时肩负着判断该树是否为二叉搜索树的信息(本文中将其称为重要信息)

利用返回值获得中序前驱,

/**

 *Definition for a binary tree node.

 *struct TreeNode {

 *    int val;

 *    TreeNode *left;

 *    TreeNode *right;

 *    TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 * };

 */

class Solution

{

public:

         //int最小值 -2147483648

         //用-2147483650 作为 不是二叉搜索树的信息

double  ValidBST(TreeNode* root,double i=-2147483649) 

         { 

//时刻警惕着,判断i是否携带重要信息

       if(root&&i!=-2147483650)

       {

            if( root->left)

              i= ValidBST(root->left,i);

         //时刻警惕着,判断刚从左子树的到的I 是否携带重要信息

        if(i==-2147483650)

            return -2147483650;

           if(i<root->val )

              i=root->val;

           else

               //重要信息的诞生地

              return -2147483650;

          i=  ValidBST(root->right,i);

             }

       return i;

     }

   bool isValidBST(TreeNode* root)

    {

       int ff;

       ff=ValidBST(root);

        if(ff==-2147483650)

        return false;

        else

            return true;

    }

};


一大牛朋友发给我的 大家可以参考下思路(可耻的盗了捂脸)

bool judge(struct TreeNode* root,long long *data)
{
    if(root==NULL)
        return true;
        
    if(root->left!=NULL)
    {
        if(judge(root->left,data)==false)
            return false;
    }
    if(root->val>*data)
        *data=root->val;
    else
        return false;
    if(root->right!=NULL)
    {
        if(judge(root->right,data)==false)
            return false;
    }
    return true;
}

bool isValidBST(struct TreeNode* root) {
    int i;
    long long data=-214748364800;
    return judge(root,&data);    
}

猜你喜欢

转载自blog.csdn.net/y2052/article/details/80085156