二进制搜索树的深度递归

时间:2015-02-09 03:56:04

标签: java recursion binary-search-tree depth

这是家庭作业,不要发布代码。拜托,谢谢。

我被指派创建一个计算BST中特定深度的方法。

要做到这一点,我要@Override方法public int depth(T data)。因此,为了递归地找到它,我需要创建一个辅助方法。

我知道我需要在树中搜索具有我正在寻找的数据的节点。所以,为此,我编写了以下代码:

@Override
public int depth(T data) {
    if (data == null) {
        throw new IllegalArgumentException("Data is null");
    }
    if (compare(data, root.getData()) == 0) {
        return 1;
    } else {
        return countNodes(search(root, data), data);
    }
}

private int countNodes(BSTNode<T> node, T data) {
    int depth = 1;
    if (node == null) {
        return 0;
    } else {
        if (compare(data, node.getData()) == 0) {
            return depth;
        } else if (compare(data, node.getData()) < 0) {
            return countNodes(node.getLeft(), data);
        } else {
            return countNodes(node.getRight(), data);
        }
    }
}

private int compare(T a, T b) {
    return a.compareTo(b);
}

然而,这不起作用,因为每次递归调用时depth将保持1;基本上,它正在重置深度值。我不知道如何在两次调用之间保持depth的值。

1 个答案:

答案 0 :(得分:1)

如果当前节点是您正在查找的节点或下一个节点的深度加上一个,如果您需要继续查看,则深度方法应返回一个。

例如:

                        N5
                    N3      N7
                  N1  N4  N6

你想知道N1的深度。

你从根开始:

N1!= N5所以你返回一个加上你在N3上检查的结果。 (1 +(N3检查的结果))

N1!= N3所以你返回一个加上你在N1上检查的结果。 (1 +(1 +(N1检查的结果)))

N1 == N1所以你返回一个。 (1 +(1 +(1)))

(1 +(1 +(1)))= 3

这是正确的深度,是初始深度调用将返回的内容。