Java 需要二叉搜索树方法:查找最小值节点

Java 需要二叉搜索树方法:查找最小值节点,java,recursion,iterator,Java,Recursion,Iterator,任何人都可以帮我做到这一点:我需要一个用于二叉搜索树ADT的公共方法,该方法使用树中最小的值返回对节点中信息的引用。该方法的签名为: 公营部门 A.设计该方法的交互版本 B.设计该方法的草书版本 C.哪种方法更好?请解释一下 这不是硬件或任何东西,这是我自己的做法。二元搜索树的左边总是有一个较低的值,对吗?所以,当你可以的时候,你应该一直向左走。如果不能,则已达到最低值。关于迭代还是递归更好的问题。这要看情况而定。一般来说,递归解决方案更容易理解,但速度较慢,因为它们消耗的堆栈空间越来越多,与递

任何人都可以帮我做到这一点:我需要一个用于二叉搜索树ADT的公共方法,该方法使用树中最小的值返回对节点中信息的引用。该方法的签名为:

公营部门

A.设计该方法的交互版本

B.设计该方法的草书版本

C.哪种方法更好?请解释一下


这不是硬件或任何东西,这是我自己的做法。

二元搜索树的左边总是有一个较低的值,对吗?所以,当你可以的时候,你应该一直向左走。如果不能,则已达到最低值。

关于迭代还是递归更好的问题。这要看情况而定。一般来说,递归解决方案更容易理解,但速度较慢,因为它们消耗的堆栈空间越来越多,与递归的深度成正比。然而,在这种情况下,您可以提出一个尾部递归解决方案,它应该易于理解,并且与迭代解决方案一样有效

public BSTNode<T> findMin(BSTNode<T> node) {
    if (node.left == null)     // if there is no left, we are done
        return node;
    return findMin(node.left); // recursively search on the left-child
}
公共BSTNode findMin(BSTNode节点){
if(node.left==null)//如果没有left,我们就完成了
返回节点;
return findMin(node.left);//递归搜索左侧子级
}

首先在head节点上调用此方法。

因为我认为如果我给了您您将无法了解的解决方案,我会给您提供一个链接,让您了解有关二进制搜索树的更多信息:

在那次评论之后,我的方式是:

public T min() {
    return recMin(root).getInfo();
}

public BSTnode<T> recMin(BSTnode<T> tree) {
    if (tree == null) {
        throw new NoSuchElementException();
    }
    if (tree.left == null) {
        return tree;
    }
    return recMin(tree.left);
}

public T IterationMin(BSTnode<T> tree) {
    if (tree == null) {
        throw new NoSuchElementException();
    }

    while (tree.left != null) {
        tree = tree.left;
    }
    return tree.getInfo();
}
publictmin(){
返回recMin(root.getInfo();
}
公共BSTnode recMin(BSTnode树){
if(tree==null){
抛出新的NoTouchElementException();
}
if(tree.left==null){
回归树;
}
返回recMin(tree.left);
}
公共T迭代最小值(BSTnode树){
if(tree==null){
抛出新的NoTouchElementException();
}
while(tree.left!=null){
tree=tree.left;
}
return tree.getInfo();
}

+1:然而,只是吹毛求疵,二叉搜索树的左边总是有较低的值,而不是二叉树。@AndrewMartin确切地说,我正在处理二叉搜索树。我不知道该怎么做。@user227227:Joel是对的,我只是对搜索树部分吹毛求疵。树是有组织的,因此最小的值在左边,最大的值在右边。所以你想开发一种方法,就像乔尔说的那样,一直向左看,直到不能再往前看。@AndrewMartin andrew,用我的两个版本的代码编辑了这篇文章,你能检查一下并给出你的反馈吗?对于你上面发布的递归解决方案,你正在铸造一个
BSTNode
来键入
t
。这将失败,请继续在返回的节点上使用
getInfo()
方法。从概念上讲,我认为你对两者都有正确的想法。但是,只有在正确构建树的情况下,才能找到最小节点。我建议编写一个
Add
方法来巩固您对BST的结构的理解。因此,在迭代解决方案中,您将使用循环来确定何时到达最左边的节点。在递归解决方案中,将一直调用min()方法,直到得到最小的解决方案。然后,为了找出哪一个更好,计算出每个解决方案需要多少步骤。你编写过BST类吗?@RicardoCacheira yes bro.@RicardoCacheira ricardo,用我尝试过的方法编辑,你能检查解决方案吗?给出你的反馈?在这种情况下,我会说递归和迭代都大致相同,因为它们都需要相同数量的比较才能达到最小值(尽管我同意你所说的,它们通常比较慢),这将完成所有工作?@user227227:这将递归地查找最小节点(即最小值)。如果您的二叉树正常工作,并且最小的值存储在最左边的节点中,那么将返回它。您仍然需要一个迭代的解决方案。@AndrewMartin检查主帖子中刚刚编辑和添加的代码。@User227227:出于好奇,为什么您不能进行测试?您需要的不仅仅是发布到测试中的代码,例如判断两个节点是否相等的比较器方法。