Javascript 基于关系数据生成层次结构

Javascript 基于关系数据生成层次结构,javascript,java,algorithm,tree,Javascript,Java,Algorithm,Tree,给出员工及其下属的名单。如何创建一个高效的递归函数,以获得经理和下属关系的树状结构,并返回顶级经理。所有名称都是唯一的,因此可以将其视为employeeId [ { name: 'Chris', subordinates: ["Jim Beglin","Rosey","Chuloo"] }, { name: 'Jim Beglin', subordinates: ["Mike", "Liz"] }, {nam

给出员工及其下属的名单。如何创建一个高效的递归函数,以获得经理和下属关系的树状结构,并返回顶级经理。所有名称都是唯一的,因此可以将其视为employeeId

[
    {
      name: 'Chris',
      subordinates: ["Jim Beglin","Rosey","Chuloo"]
    },
    {
      name: 'Jim Beglin',
      subordinates: ["Mike", "Liz"]
    },
    {name: 'Mike'},
    {name: 'Liz'},
    {
      name: 'Rosey',
      subordinates: ["Annie","Michelle", "Sam", "Ivy"]
    },
    {name: 'Annie'},
    {name: 'Michelle'},
    {name: 'Sam'},
    {name: 'Ivy'},
    {
      name: 'Chuloo',
      subordinates: [ "Nick","Charly","Steph","Jon"]
    },
    {name: 'Nick'},
    {
      name: 'Charly'
      subordinates: ["Law"]
    },
    {name: 'Law'},
    {name: 'Steph'},
    {name: 'Jon'}
  ]

您可以创建员工列表,其中员工的每个节点表示其拥有的子员工。您可以继续使用对象列表和数组递归调用函数。你可以遵循这个算法

算法[pseducode]:

function makeEmployeeTree(List list, Array objects){
      if(objects length == 0) return;

      if(list isEmpty()){
          list.add(objects[0]);
          remove -> objects[0] from objects;
      }
      else{
          traverse -> list:
                 if (currentnode contains subordinates  == objects[0]){
                           insert -> objects[i] in currentnode;
                           remove -> objects[0] from objects;
                  }
           // in-case no subordinates found, append in list
           insert -> objects[0] at the of list;
           remove -> objects[0] from objects;
      }
      // recursively call the funtion for following object from objects;
      makeEmployeeTree(list, objects);
}
现在,在按层次顺序制作列表后,按dfs打印每个节点,以获得所需的输出。。就这样。快乐编码


请编辑标记并在这里添加您将要使用的编程语言,如果您不能理解那里的伪代码,我将稍后添加代码。