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

时间:2014-12-10 03:01:35

标签: algorithm data-structures tree traversal tree-traversal

我有一个树形结构,每个节点可以拥有基本上无限的孩子​​,它可以为博客建立评论。

考虑到特定评论的ID,我试图找出评论在树中的深度/级别。

我关注this guide that explains it for binary trees,但在将其调整为非二叉树时,我遇到了麻烦。

这是我到目前为止的尝试(在Swift中):

func commentLevelRecursive(comment: Comment, commentID: String, currentLevel: Int) -> Int {
    if comment.identifier == commentID {
        return currentLevel
    }

    var newLevel = currentLevel

    for reply in comment.replies {
        newLevel = commentLevelRecursive(reply, commentID: commentID, currentLevel: currentLevel + 1)
    }

    return newLevel
}

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

有人能给我一些洞察我出错的地方吗?

2 个答案:

答案 0 :(得分:1)

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

这个想法是一样的:

level(P) = max(level(C) for each child node C of P)+1

答案 1 :(得分:0)

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