数据结构与算法

时间:2019-11-19 18:47:52

标签: javascript algorithm data-structures

我陷入了这种数据结构和算法问题。

以下数组的标签:[Id, Label, ParentId]

var dataSet = [[5, 'a', 2], [2, 'b', 5], [5, 'c', 20], [20, 'x', null], [5, 'd', 2]];

在这里我们可以找到包含null的Parent,这意味着[20,'x',null]数组成为父根。

然后,父ID应与其子节点[20, 'x', null]数组ID相匹配,并与[5, 'c', 20]数组父ID相匹配。

以下是我正在寻找父母与子女关系的格式

 - Parent Root: [20,'x']  [20,'x',null] 
 - ChildNode:  ->[5, 'c'] [5,'c',20] 
 - SubChild:   ->->[2,'b'] [2,'b',5] 
 - nextSub:   ->->->[5,'a'] [5,'a',2] 
 - final node: ->->->[5,'d'] [5,'d',2]

那么我们可以使用javascript开发哪种数据结构和哪种算法?

1 个答案:

答案 0 :(得分:1)

您可以使用reduceRight创建递归函数,因为我们将使用splice,但是您也应该reverse

const data = [[5, 'a', 2], [2, 'b', 5], [5, 'c', 20], [20, 'x', null], [5, 'd', 2]];

function f(data, pid = null) {
  return data.reverse().reduceRight((r, [id, str, parent], i) => {
    if (pid == parent) {
      const el = [id, str, parent];
      data.splice(i, 1);

      const children = f(data, id);
      if (children.length) el.push(...children);
      r.push(el)
    }
    return r;
  }, []);
}

const result = f(data);
console.log(result);