簡體   English   中英

基於關系數據生成層次結構

[英]Generate hierarchical structure based on relational data

給定員工及其下屬的名單。 我如何創建一個有效的遞歸函數來獲得與經理和下屬關系的樹結構並返回最高經理。 所有名稱都是唯一的,因此可以將它們視為員工 ID。

[
    {
      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'}
  ]

您可以制作一個員工列表,其中員工的每個節點表示他們擁有的子員工。 您可以繼續使用 List 和對象數組遞歸調用函數。 你可以按照算法。

算法[偽代碼]:

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 順序打印每個節點以獲得所需的輸出..就是這樣。 快樂編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM