当前位置: 首页 > 知识库问答 >
问题:

二进制搜索树的递归深度

章昆琦
2023-03-14

这是作业,不要贴代码。求你了,谢谢你。

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

为此,我需要@Overridea方法公共int深度(T数据)。因此,要递归地找到它,我需要创建一个助手方法。

我知道我需要在树中搜索包含我要查找的数据的节点。为此,我编写了以下代码:

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

然而,这是行不通的,因为每次进行递归调用时,深度将保持1;本质上,它是在重置深度值。我不知道如何在调用之间保持深度的值。

共有1个答案

颜镜
2023-03-14

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

例如:

                        N5
                    N3      N7
                  N1  N4  N6

你想知道N1的深度。

从根开始:

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

N1!=N3,所以您返回1加上N1的检查结果。(1(1(N1检查结果))

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

(1 (1 (1))) = 3

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

 类似资料:
  • 从二叉查找树中删除节点时,您可以将节点替换为左侧的最大子节点或右侧的最小子节点。 我很难理解以下实现执行删除操作的方式。 上面的代码包括以下步骤: < li >查找替换节点。 < li >让替换节点引用已删除节点的左右子节点。 < li >让已删除节点的左右子节点将替换节点作为父节点。 < li >让替换节点引用已删除节点的父节点作为自己的父节点。 < li >清理。 我有困难的部分特别是递归。据

  • 问题内容: 我知道Go有一个包含搜索功能的程序包,但这是出于教育目的。我一直在尝试在Go中实现二进制搜索算法,但无法使其正常工作。 这是我的代码: 它总是打印。为什么? 问题答案: 二进制搜索的逻辑是合理的。唯一的问题是您忘记了将每个递归调用的结果分配给和。 当前,您有以下这些递归调用: 您只需要分配结果:

  • 我正在尝试使用递归在python中实现二进制搜索树。我被困在程序中发生的一些无限递归中。我通过传递地址和数据对函数RecursBST进行递归调用,直到顶部遍历到它的左或右子级的None值为止。 我运行到以下错误:

  • 我试图为我的BST做一个递归加法。public add方法接受一个int参数,private方法接受相同的int和一个节点。这是我目前掌握的代码 我经常得到空指针,也尝试过调试,但我的逻辑中有一些我看不到的缺陷。

  • 我有嵌套父子项的: 使用: 我访问第一级项目“A”:。 现在,我迭代每个第一级“A”项来访问他们的孩子——第二级项目“B”: 在第二个层次,我不知道下面是否有任何第三个层次的项目“C”。如何确保函数向下推进,因为下面有嵌套的项目,将项目添加到列表中,直到它到达末尾?

  • 这是我的代码: 首先,我从一个列表中做一个二叉查找树,并检查它是否是一个二叉查找树。 给定列表的第一个元素是根节点,后续元素成为子节点。到叶节点。 例如,调用 的结果为: 结果是二叉搜索树,因为左子节点小于父节点,右子节点大于父节点。因此,调用<code>bst_child</code>的结果是<code>True</code>。 然后我添加了寻找二叉查找树深度的代码。通过对第一个列表排序,我制作