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

如何计算二叉搜索树中每个节点的深度?

徐卓
2023-03-14

我的任务是计算每个节点的深度,并将其存储在Node类中给出的“深度”中。但是我不知道我应该如何处理这个任务。我在互联网上寻找一些示例,但没有找到任何适合我的任务的示例。这是我给定的Node类的代码:

Node
{int value; Node left, right; int depth;}

我以为我可以用类似的方法来计算树的高度,但是没有成功。有帮助吗?

共有2个答案

龙令
2023-03-14

二叉树上的大多数算法都是通过递归工作的——你检查一个基本条件,看看递归是否应该停止,然后你为左右两个孩子做你的事情,可能会积累你发现的东西。在这种情况下,

static void addDepth(Node n, int currentDepth) {
    if (n == null) return; // check base condition

    // store current depth in this node
    n.setDepth(currentDepth);

    // recursion
    addDepth(left, currentDepth+1);
    addDepth(right, currentDepth+1);
}

或者,或者(假设addDeth是您的Node类的一部分):

void addDepth(int current) {
     depth = current;
     if (left != null) left.addDepth(current+1);
     if (right != null) right.addDepth(current+1);
}

两种版本都是等效的。在第二个版本中,我是在递归之前检查基本条件,而不是在查看节点之前(如第一个版本中所做的那样)。

王昊
2023-03-14
void updateDepth(Node node, int depth)
{
    if (node != null)
    {
        node.depth = depth;
        updateDepth(node.left, depth + 1); // left sub-tree
        updateDepth(node.right, depth + 1); // right sub-tree
    }
}

使用<code>updateDepth(root,0)调用

 类似资料:
  • 我需要得到所有节点的x,y坐标,例如: X:使用顺序遍历访问节点之前已经访问的节点数 Y:节点从根开始的深度 例如对于节点15,x=5(15之前:已经访问过7, 8, 9, 10, 13),y=1(第二级) 树没有父指针 结果:x是错误的,y是正确的 打印: 结果: 我已经尝试过了(我认为这是不正确的,因为正确的子树遍历不计入节点) 结果是

  • 我需要创建一个递归方法,它将二进制搜索树的根节点作为参数。这个递归方法随后将返回整个二叉搜索树中节点总数的int值。 这是我目前所掌握的: main方法调用节点如下所示: 所以我是按顺序运行搜索的,一旦我到达一个没有子节点的节点,我就会删除当前节点,返回父节点并继续。我对上面的方法进行了调试,当程序最终计数并删除根节点左右两侧的所有节点并尝试返回1时,程序以NullPointerException

  • 问题内容: 我想在非二叉树中搜索一个项目(任何节点都可以有n个孩子)并立即退出递归。所讨论的节点可以是任何节点,而不仅仅是叶子。 这是我的代码,但我没有完整的搜索。 nNode包含: (是孩子) 和数据对象。 问题答案: 探索第一个孩子后,您不应该退出。您不需要循环前面的语句。

  • 删除某些内容后,如何保持二叉搜索树节点的深度属性更新?

  • 这是家庭作业。不要只发布代码。 我需要在二进制搜索树中找到给定数据点的深度。我实现了一个<code>depth()</code>方法和一个helper方法<code>countNodes()</code>,它递归地对节点进行计数。 如果我们要搜索的数据不在树中,我需要返回< code>-1。根据我的递归,我看不出这怎么可能。

  • 当删除具有两个子节点的节点时,如果指示使用标准的二叉搜索树节点删除算法,我们应该将其替换为右子树的最小节点还是左子树的最大节点?