当前位置: 首页 > 知识库问答 >
问题:

验证二叉搜索树-1

赵钊
2023-03-14

我的解决方案在第二个例子中失败了,我不知道为什么,请解释。

问题是:

给定一棵二叉树,确定它是否是有效的二叉查找树(BST)。

假设BST的定义如下:

节点的左子树只包含键小于节点键的节点。节点的右子树仅包含键大于节点键的节点。左子树和右子树都必须是二进制搜索树。

例1:

                 2
                / \
               1   3

输入:[2,1,3]

输出:真

例2:

                 5
                / \
               1   4
                  / \
                 3   6

输入:[5,1,4,空,空,3,6]

输出:false

说明:根节点的值为5,但其右子节点的值为4。

  class Solution {
public:
    bool util(TreeNode*root,int minv=INT_MIN,int maxv=INT_MAX)
    { if(root==NULL)
        return true;
     if((root->val >= minv and root->val <= maxv) and 
util(root->left,minv,root->val)and util(root->right,root->val,maxv));
         return true;
 
     return false;
    }
    bool isValidBST(TreeNode* root) {
        return util(root);
    }
};

共有1个答案

郗丰
2023-03-14

我看到的一件事是,在二叉搜索树中,节点右侧的所有元素都必须大于节点。您的解决方案失败为4

编辑:在交换之后,它可能符合二叉树的定义,但它不是一个好的二叉树,在正确的子树中有随机3。非完全二叉搜索树不需要是平衡树。在VisuAlgo中插入一组数字(https://visualgo.net/bn/bst)如果您仍然感到困惑,这可能有助于演示二叉搜索树如何处理这些数据。

 类似资料:
  • 上面的代码对所有测试用例都能很好地工作。但是,下面的代码不是。 额外的IF条件有什么需要?即使没有它们,函数也应该从下面的if条件返回false?我错过了什么?

  • 我试图验证二叉查找树。给定二叉树的根,确定它是否是有效的二叉查找树(BST)。 有效的BST定义如下: 节点的左子树只包含键小于节点键的节点。节点的右子树只包含键大于节点键的节点。左子树和右子树也必须是二叉搜索树。 https://leetcode.com/problems/validate-binary-search-tree/ 我正在使用递归解决方案,但它未能通过以下测试用例: 输入:[2,1

  • 一直在研究一些黑客等级破解编码面试问题,最近才发现这一个:二叉树问题。 在问题描述中,作者介绍了被认为是有效的二叉树的内容。 “节点左侧子树中每个节点的值都小于该节点的数据值。 然而他们提到这棵树 是有效的。但根据他们对有效二叉搜索树的描述,这棵树不是无效的吗,因为节点4有一个节点5的左子节点,后者更大。还是我误解了什么是有效的BST?

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

  • 假设BST定义如下: 节点的左子树只包含键小于节点键的节点。节点的右子树只包含键大于节点键的节点。左子树和右子树也必须是二叉搜索树。 示例1:

  • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,