Java - 如何在没有参数的情况下递归遍历二叉搜索树

时间:2016-11-18 21:48:48

标签: java recursion

我在使用我的编码项目时遇到了一些麻烦。该程序是一个包含WordCount对象的二进制搜索树。它们只包含两个字段,一个字符串和一个整数,用于保存单词在文本文件中出现的次数。

我遇到问题的方法需要遍历树以找到最常用的单词。我已经实现了一个可以完成这个技巧的方法,但我发现该方法应该是递归的而不是使用参数。

我已经写过的方法是:

WordCount getMostCommonWord(BinaryTreeNode<WordCount> wordNode) 
        throws EmptyCollectionException {

    WordCount current = wordNode.getElement();

    BinaryTreeNode left = wordNode.getLeftChild();
    BinaryTreeNode right = wordNode.getRightChild();

    WordCount maxLeft;
    WordCount maxRight;

    if (left != null) {
        maxLeft = getMostCommonWord(left);
        if (current.getCount() < maxLeft.getCount()) {
            current = maxLeft;
        }
    }

    if (right != null) {
        maxRight = getMostCommonWord(right);
        if (current.getCount() < maxRight.getCount()) {
            current = maxRight;
        }
    }

    return current;
}

这也是我第一次发布在这里,很抱歉,如果我做错了。关于如何在没有参数的情况下使其工作的任何提示都会有很大帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

你很亲密。由于您无法使用参数,因此请直接在节点类上创建此方法。然后使用this

这样做的优点是通用,但需要在您的情况下TwordCount实现Comparable

BinaryTreeNode<T> getMaxNode() 
        throws EmptyCollectionException {

    BinaryTreeNode<T> left = this.getLeftChild();
    BinaryTreeNode<T> right = this.getRightChild();

    BinaryTreeNode<T> currentMax = this;
    BinaryTreeNode<T> maxLeft;
    BinaryTreeNode<T> maxRight;

    if (left != null) {
        maxLeft = left.getMaxNode();
        if (this.getElement() < maxLeft.getElement()) {
            currentMax = maxLeft;
        }
    }

    if (right != null) {
        maxRight = right.getMaxNode();
        if (this.getElement() < maxRight.getElement()) {
            currentMax = maxRight;
        }
    }

    return currentMax;
}