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