我想找到最有效的方法来检查二进制搜索树中最小值的节点。我现在不想用某种编程语言来做,我只想考虑最有效的算法。
对此你怎么看:
procedure minBST(t)
if (t = NULL) then return;
if (t -> left = NULL) then return t -> inf;
*// if the left node is null, then in a BST the smallest value will be the root*
if (t -> left != NULL) then ....
*// I need to dig more in the left side until I get the last left node*
我的问题是我应该如何深入挖掘,直到我得到最后一个左节点。我也试着解释这些步骤。你认为那是做这件事的最好方法吗?
public int MinValue(TreeNode root)
{
if (root == null)
{
return -1;
}
TreeNode node = root;
while (node.Left != null)
{
node = node.Left;
}
return node.Value;
}
https://codestandard.net/articles/min-value-binary-search-tree
以下代码应能完成此任务:
node* FindMin(node* n)
{
if(n == NULL)
return NULL;
if(n->left == NULL)
return n;
while(n->left != NULL)
{
n = n->left;
}
return n;
}
复杂度为O(log(n)),即假设树是平衡的,您可以获得的最佳值。
如果你有一个适当的BST,你可以继续向下左边的孩子:
10
/ \
5 12
/ \ / \
1 6 11 14
如果节点没有左子节点 (Null),则您知道当前所在的节点具有最小值。最简单的方法是通过递归:
int minBST(TreeNode node)
{
if (node->left == Null)
return node->value;
else
return minBST(node->left);
}
要开始搜索,只需使用根作为节点参数调用上面的函数。上面的树将有一个代码路径,如下所示:
如果您的树包含n个节点并且是平衡的(每个节点的深度相等),则这将需要O(log_2N)个操作,并且是无需额外记账的最快方法。树是平衡的这一事实对于获得最佳性能非常重要,如果您想保持树的平衡,请查看红黑树。
本文向大家介绍在Javascript二进制搜索树中搜索最小值和最大值,包括了在Javascript二进制搜索树中搜索最小值和最大值的使用技巧和注意事项,需要的朋友参考一下 在二元搜索树中,如果我们查看左孩子总是比父孩子小的属性,我们会发现,如果继续向左孩子迭代直到到达没有左孩子的节点,我们基本上会发现BST中最小的元素。 让我们在代码中实现此功能。从现在开始,我们将仅实现该函数的单个版本,即迭代或
我对如何在二叉查找树中排列节点的顺序有点困惑。左边的二叉查找树中的子树节点能比根节点大吗? 例如,以下内容会是二叉搜索树吗? 上面让我困惑的是1(3)的右子树是否可以大于原始根节点(2)。
您好,我正在尝试以的格式打印二进制搜索树的级别顺序。我目前正在使用队列来获取级别顺序,但很难获取父节点。可以处理队列吗?如果是这样的话,我该怎么做呢?如果不是的话,什么是更理想的方法?非常感谢。 例如,使用以下树: 级别0:(6,空) 一级:(5,6)(7,6)
本文向大家介绍在Javascript二进制搜索树中搜索值,包括了在Javascript二进制搜索树中搜索值的使用技巧和注意事项,需要的朋友参考一下 我们将使用BST的属性在其中查找元素。首先让我们看一下搜索的迭代实现- 示例 在此功能中,我们从根作为currNode开始,然后将我们的数据与currNode的数据进行比较。如果找到匹配项,则返回true,否则我们将继续根据数据与currNode数据
本文向大家介绍用C ++程序查找二进制搜索树的最小值,包括了用C ++程序查找二进制搜索树的最小值的使用技巧和注意事项,需要的朋友参考一下 它是一个寻找二叉搜索树的最小值的程序。 演算法 示例 输出结果
目前,我在理解如何在没有传递节点时从二进制搜索树中删除节点时遇到了一个问题。我有两个类,BSTSet和BSTNode,每个类都有一个remove方法。。 当我被传递一个节点时,我理解删除方法,但当我在根上调用remove方法并试图从node类中删除节点时,我不知道从何处开始。有人能告诉我吗?谢谢如果您想了解更多信息,请询问。