为了账号安全,请及时绑定邮箱和手机立即绑定

如何将整数数组转换为树?

如何将整数数组转换为树?

拉丁的传说 2023-03-10 16:46:04
这里有 100 个数字,每行 10 个。[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]我想将这些数字排列成一棵树,其中每个节点最多有 5 个元素。是这样的:[                                                                                       ] [                   ],[                   ],[                   ],[                   ]  [ ],[ ],[ ],[ ],[ ]   [ ],[ ],[ ],[ ],[ ]   [ ],[ ],[ ],[ ],[ ]   [ ],[ ],[ ],[ ],[ ]   1   6   1   6   1     6   1   6   1   6     1   6   1   6   1     6   1   6   1   6   2   7   2   7   2     7   2   7   2   7     2   7   2   7   2     7   2   7   2   7   3   8   3   8   3     8   3   8   3   8     3   8   3   8   3     8   3   8   3   8   4   9   4   9   4     9   4   9   4   9     4   9   4   9   4     9   4   9   4   9   5   0   5   0   5     0   5   0   5   0     5   0   5   0   5     0   5   0   5   0所以我们在树中有 4 个“层”:在第 1 层(顶层),我们有 4 个孩子(4 个数字数组数组)。在第 2 层,我们有 5 个孩子(5 个数字数组)。在第 3 层,我们有 5 个孩子(5 个数字)。第 4 层是数字。如何编写 JavaScript 算法来生成这样的树?规则是,每个块最多 5 个。或者更一般地说,n每个块的最大值。这有点类似于数组分块算法,但同时看起来更复杂。我已经为此困惑了几天,但这将有助于解决这个问题:如何将数组划分为大小为 2 的幂的桶树?基本上,随着数组变长,嵌套会越来越大。另一个更简单的例子是 13 项数组:[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3]哪个被转换成这棵树:[           ] [ ],[ ],[ ]  1   6   1  2   7   2  3   8   3  4   9     5   0   
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您可以使用递归方法,从最内部的块大小开始,然后将该输出划分到每个级别。因此,只要结果长度大于参数,size您就可以通过调用函数来划分它。


const data = [

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,

 1, 2, 3, 4, 5, 6, 7, 8, 9, 0

]


function divide(data, size) {

  const result = []


  for (let i = 0; i < data.length; i += size) {

    const chunk = data.slice(i, i + size);

    result.push(chunk)

  }


  if (result.length > size) {

    return divide(result, size)

  }


  return result;

}


const result = divide(data, 5);

console.log(result)


查看完整回答
反对 回复 2023-03-10
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信