这是我在采访中遇到的一个问题,我还不完全确定如何解决。
假设我们有一个数字树,我们想要找到树中节点具有相同值的最大连通区域的大小。例如,在这棵树中
POST /index/type/_delete_by_query
{
"query" : {
"match_all" : {}
}
}
答案是4,因为你有一个4个连接3s的区域。
答案 0 :(得分:3)
我建议使用带有两个输入的函数进行深度优先搜索:
并返回两个输出:
然后,您可以使用虚拟目标值(例如-1)和根节点调用此函数,它将在第二个输出中返回答案。
在伪代码中:
dfs(target_value,start_node):
if start_node.value == target_value:
total = 1
best = 0
for each child of start_node:
x,m = dfs(target_value,child)
best = max(m,best)
total += x
return total,best
else
x,m = dfs(start_node.value,start_node)
return 0,max(x,m)
_,ans = dfs(-1, root_node)
print ans
答案 1 :(得分:0)
将计数器与每个节点相关联,以表示以该节点为根的最大连接区域,其中所有节点都是相同的值。每个节点将此计数器初始化为1。
在树上运行DFS。
当您从任何节点备份时,如果两个节点具有相同的值,请将子节点的计数器添加到父节点的计数器。
完成后,与节点关联的最大计数器就是您的答案。您可以在运行算法时跟踪此信息。