Algorithm 如何在非二叉树中查找节点的深度/级别?

Algorithm 如何在非二叉树中查找节点的深度/级别?,algorithm,data-structures,tree,traversal,tree-traversal,Algorithm,Data Structures,Tree,Traversal,Tree Traversal,我有一个树状结构,每个节点可以有基本上无限的子节点,它为博客的评论建模 我试图找出,给定特定注释的ID,该注释在树中的深度/级别 我一直在关注,但当我把它改编成非二叉树时,我遇到了一些麻烦 以下是我迄今为止的尝试(Swift): 但它似乎总是返回1。我认为这是因为newLevel总是从0增加到1,然后返回 谁能告诉我哪里出了问题吗?二叉树是一种特殊情况,每个节点只有两个子节点。 用于查找节点级别的方法可以扩展到公共树 想法是一样的: level(P) = max(level(C) for eac

我有一个树状结构,每个节点可以有基本上无限的子节点,它为博客的评论建模

我试图找出,给定特定注释的ID,该注释在树中的深度/级别

我一直在关注,但当我把它改编成非二叉树时,我遇到了一些麻烦

以下是我迄今为止的尝试(Swift):

但它似乎总是返回1。我认为这是因为newLevel总是从0增加到1,然后返回


谁能告诉我哪里出了问题吗?

二叉树是一种特殊情况,每个节点只有两个子节点。 用于查找节点级别的方法可以扩展到公共树

想法是一样的:

level(P) = max(level(C) for each child node C of P)+1
intmaxDepth(intx,intparent){
int mx=0;
对于(int i=0;i
newLevel=max(newLevel,commentLevelRecursive(reply,commentID:commentID,currentLevel:currentLevel+1))@为什么要使用max?此ID的节点只出现一次。是的,但您正在处理多个回复,因此您希望所有回复的最大深度。在这种情况下,“新水平”将是每个水平的最大深度为它的孩子。因此,如果遵循该规则,第一个节点上的深度将达到最大值。@这将如何影响上述代码?如果我替换for循环中设置的
newLevel
,它不会输出正确的值。哦,对不起,我读错了。。每次都必须检查是否找到节点。让函数执行以下操作:如果找不到,则返回0;如果找到,则返回级别。在for-for循环中,您每次都会询问commentLevelRecursive(reply,commentID:commentID,currentLevel:currentLevel+1)是否为0,如果不是,则继续for循环,如果不是,则返回该值,因为您找到了答案。在for循环之后,始终返回0。如果你在那里,那是因为你在食物循环中找不到食物,所以你返回0。很抱歉误导您:(这将如何应用到我的代码中?或者它需要从头开始重新编写?这不是为了找到树的最大深度吗?
level(P) = max(level(C) for each child node C of P)+1
int MaxDepth(int x,int parent){
    int mx = 0;
    for(int  i = 0;i < graph[x].size();i++)
        if(graph[x][i]!=parent){
            mx = max(MaxDepth(graph[x][i],x),mx);
        }
        return mx + 1;
}