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

这里有 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. 在第 1 层(顶层),我们有 4 个孩子(4 个数字数组数组)。

  2. 在第 2 层,我们有 5 个孩子(5 个数字数组)。

  3. 在第 3 层,我们有 5 个孩子(5 个数字)。

  4. 第 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   


拉丁的传说
浏览 83回答 1
1回答

qq_遁去的一_1

您可以使用递归方法,从最内部的块大小开始,然后将该输出划分到每个级别。因此,只要结果长度大于参数,size您就可以通过调用函数来划分它。const data = [&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0,&nbsp;1, 2, 3, 4, 5, 6, 7, 8, 9, 0]function divide(data, size) {&nbsp; const result = []&nbsp; for (let i = 0; i < data.length; i += size) {&nbsp; &nbsp; const chunk = data.slice(i, i + size);&nbsp; &nbsp; result.push(chunk)&nbsp; }&nbsp; if (result.length > size) {&nbsp; &nbsp; return divide(result, size)&nbsp; }&nbsp; return result;}const result = divide(data, 5);console.log(result)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript