最远祖先
1 2 3 / \ / 4 5 6 7
输入是int[][] input, input[0]是input[1] 的parent,比如 {{1,4}, {1,5}, {2,5}, {3,6}, {6,7}}会形成上面的图
第一问是只有0个parents和只有1个parent的节点
第二问是 两个指定的点有没有公共祖先 bfs/dfs
第三问是就一个点的最远祖先,如果有好几个就只需要输出一个就好,举个栗子,这里5的最远祖先可以是1或者2,输出任意一个就可以 bfs
public int findEarliestAncestor(int[][] edges, int node)
{
Map<Integer, Set<Integer>> map = new HashMap<>();
for(int i = 0; i< edges.length; i++)
{
int parent = edges[i][0];
int child = edges[i][1];
map.putIfAbsent(child, new HashSet<Integer>());
map.get(child).add(parent);
}
Queue<Integer> queue = new LinkedList<>();
Set<Integer> path = new HashSet<Integer>();
queue.offer(node);
path.add(node);
int earliestAncestor = node;
while(!queue.isEmpty())
{
int size = queue.size();
for(int i = 0; i< size; i++)
{
int current = queue.poll();
earliestAncestor = current;
for(Integer nextElement: map.get(current))
{
if(!path.contains(nextElement))
{
queue.offer(nextElement);
path.add(nextElement);
}
}
}
}
return earliestAncestor;
}
Last updated