树中最深的方式

时间:2012-03-30 14:56:59

标签: ruby tree

我有一个n元素的树,可存储|id|parent_id|之类的内容。我需要找到这棵树的最大深度。我需要在Ruby中执行此操作,但伪代码也可以帮助我。

2 个答案:

答案 0 :(得分:1)

您可以使用以下功能(伪代码)

def level(id)
    find parent_id for id
    if parent_id then 
        level(parent_id) + 1 
    else 
        1    // no parent -> root
end def

并迭代所有项目(即ids)并搜索最大值。为了提高效率,您可以将已计算的深度存储在树结构中,也可以单独存储在缓存中,并从中访问值。

答案 1 :(得分:1)

假设{id, parent_id}对在字典/地图中,您可以使用memoization技术找到最大深度:

主要功能(伪代码):

Map tree; // <<=== This is your tree; id is the key; parent_id is the value
Map depth; // This map is used for memoization
int max = -1;
foreach pair in tree
    max = Max(memoized_depth(id, tree, depth), max)

递归深度函数:

int memoized_depth(id, tree, depth)
    if (depth.containsKey(id)) return depth[id];
    if (!tree.contains(id)) return 0; // no parent means it's a root
    int res = memoized_depth(tree[id] // parent, tree, depth) + 1;
    depth[id] = res;
    return res;