题目链接leetcode582
题目简述:
本题是算法在操作系统的应用,每个process(进程)都有pid(process id),每个process都有唯一的父进程,用ppid (parent process id)代表,每个process可以有多个children process(子进程)。当我们kill某个process的时候,需要把它所有的children process也kill掉。所以本题就是要求我们在kill某个process的时候,找到所有需要kill的process。
思路:
假设我们需要kill的process为P,那么我们可以采用递归的方式,将所有的P的子进程、子进程的子进程等等的父进程都设置为P,而其他的所有进程的父进程都设置为0(把这个过程叫做reparent)。最后遍历数组就可以找到所有需要kill的process。
递归部分的代码为:
/*
@param map: use map to store pid(key) and ppid(val)
@param pid: pid of the process need to be reparent
@param kill: pid of the process need to be kill
*/
int reparent(unordered_map<int, int>& map, int pid, int kill){
if(map[pid] == 0 || map[pid] == kill)
return map[pid];