需要二进制搜索树方法:找到最小值节点

时间:2013-05-22 22:04:28

标签: java recursion iterator

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

public T min()

一个。设计方法的交互式版本。

B中。设计方法的递归版本。

℃。哪种方法更好?请解释一下。

这不是硬汉或任何东西,它本身就是一种做法。

3 个答案:

答案 0 :(得分:3)

我认为,如果我给你解决方案你将无法学习,我会给你一个链接,阅读更多关于二元搜索树的信息:http://en.wikipedia.org/wiki/Binary_search_tree

在评论之后,我的方式:

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();
}

答案 1 :(得分:2)

二叉搜索树总是左边有一个较低的值,对吗?所以,你应该随时离开。如果你不能,那么你已达到最低值。

答案 2 :(得分:2)

关于迭代或递归是否更好。这真的取决于。通常,递归解决方案往往更容易理解,但速度较慢,因为它们会消耗与递归深度成比例的越来越多的堆栈空间。但是,在这种情况下,您可以提出一种尾递归解决方案,该解决方案应该易于理解,并且与迭代解决方案一样高效。

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
}

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