Data structures 给出一个树检查,如果它是一个有效的BST
有人能帮我解释一下我的逻辑哪里出了问题吗? 问题是给你一个树的根,你需要知道树是否是BST 节点左子树中每个节点的数据值都小于该节点的数据值。 节点右子树中每个节点的数据值都大于该节点的数据值。 给定一棵二叉树的根节点,你能确定它是否也是一棵二叉搜索树吗Data structures 给出一个树检查,如果它是一个有效的BST,data-structures,Data Structures,有人能帮我解释一下我的逻辑哪里出了问题吗? 问题是给你一个树的根,你需要知道树是否是BST 节点左子树中每个节点的数据值都小于该节点的数据值。 节点右子树中每个节点的数据值都大于该节点的数据值。 给定一棵二叉树的根节点,你能确定它是否也是一棵二叉搜索树吗 boolean checkBST(Node root) { if(root.left==null && root.right==null) return true; if(root.left!=null) {
boolean checkBST(Node root) {
if(root.left==null && root.right==null)
return true;
if(root.left!=null) {
if(root.data<root.left.data)
checkBST(root.left);
else
return false;
}
if(root.right!=null) {
if(root.data>root.right.data)
checkBST(root.right);
else
return false;
}
return true;
}
boolean checkBST(节点根){
if(root.left==null&&root.right==null)
返回true;
if(root.left!=null){
if(root.dataroot.right.data)
checkBST(root.right);
其他的
返回false;
}
返回true;
}
您的比较结果是相反的。如果这是一个有效的BST,则根中的数据不应小于其左子树中的数据,同样,根中的值不应大于其右子树中的数据
还请注意,在上面的语句中,我包含了相等-通常BST允许相等的元素,它们可以放在左侧或右侧
最后最重要的一点——如果这是一个有效的BST,那么根应该不少于其左子树中的所有节点。仅将该值与左子树的根进行比较。但是,左子树的根小于其右子树中的所有注释,因此这些节点可能比原始根大。考虑这个例子:
10
/
5
/ \
3 13
根据您的检查,这是一个有效的BST,而不是 BST具有以下属性
- 节点的左子树仅包含键小于节点键的节点
- 节点的右子树仅包含键大于节点键的节点
- 左子树和右子树也必须是二进制搜索树
bool isBst(Node*Node,int left=int_MIN,int right=int_MAX){
如果(!节点)
返回true;
如果(节点->数据<左| |节点->数据>右)
返回false;
返回isBst(节点->左,左,节点->数据)
&&isBst(节点->右侧,节点->数据,右侧);
}
我不知道为什么这个问题会得到这么多的反对票,但一般来说,在你提出问题后,请尝试改进问题的格式。我重新格式化了代码以使其更具可读性,并且编辑了标题以反映您要求的答案,与此问题相同:,并且您的初始实现也以同样的方式被破坏。也许你有相同的教授。如果你的教授告诉你,你可以通过比较每个节点和它的子节点来检查一个二叉树,那么请告诉他这个答案,这样他就不会再犯同样的错误了。
bool isBst(Node *node, int left = INT_MIN, int right = INT_MAX){
if (!node)
return true;
if (node->data < left || node->data > right)
return false;
return isBst(node->left, left, node->data)
&& isBst(node->right, node->data, right);
}