检查 [1, null, 1] 和 [1, 1] 是有效的二叉搜索树

问题描述

[1,null,1][1,1] 可能的二叉搜索树是什么?会有什么不同吗?

我的代码[1,1] 验证为 BST 而不是 [1,1],我不明白为什么...

bool isBST(TreeNode* root,int max,int min){
    if(!root)
        return true;
    if((max!= NULL && max<=root->val) || (min!= NULL && min>root->val))
        return false;
    if(!isBST(root->left,root->val,min) || !isBST(root->right,max,root->val))
        return false;
    return true;
}
bool isValidBST(TreeNode* root) {
    int min =NULL,max = NULL;
    return isBST(root,NULL,NULL);
}

为什么我的代码没有为 [1,1] 返回 true?

解决方法

数组格式通常是树中值的广度优先顺序,其中 null 是没有节点的占位符。

例如 [1,1] 是这棵树的表示:

      1
     /
    1

[1,null,1] 是这棵树的表示:

       1
      / \
   null  1 

是:

       1 
        \
         1

另一个更大的例子:[10,5,8,2,6,1,3,7] 代表:

           10
          /  \
         5    8
        /    /
       2    6
      / \    \
     1   3    7

所以,是的,[1,1][1,1] 之间是有区别的。

您的代码不认为第二个有效的原因是因为在这一行中进行了比较:

if((max!= NULL && max<=root->val) || (min!= NULL && min>root->val))
//                   ^^

你应该允许一个值等于max,所以更正如下:

if((max!= NULL && max< root->val) || (min!= NULL && min>root->val))

其他一些说明:

  • 我发现您的函数首先接受 max 参数然后是 min 令人困惑。考虑改变这两个参数的顺序。

  • 使用 NULL 作为 minmax 的初始值可能会导致问题,当您的树恰好具有等于 NULL 的值(在大多数环境 0 将等于 NULL)。考虑分别使用 INT_MININT_MAX 作为初始值,然后您还可以删除 isBST 函数中的额外条件。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...