ある木構造
図1.
id | parent_id | depth |
---|---|---|
1 | 1 | |
2 | 1 | |
3 | 1 | 2 |
4 | 2 | 2 |
5 | 3 | 3 |
6 | 3 | 3 |
7 | 4 | 3 |
8 | 5 | 4 |
9 | 5 | 4 |
10 | 6 | 4 |
11 | 6 | 4 |
に対して、
depthの変わり目に適当な要素を挿入できるものとします。
挿入する要素のidを通し番号、parent_idを1つ上のparent_idと同じにするというルールの下、
適当な要素を挿入すると、
図2.
id | parent_id | depth |
---|---|---|
1 | 1 | |
2 | 1 | |
3 | 1 | |
4 | 1 | |
5 | 1 | 2 |
6 | 2 | 2 |
7 | 2 | 2 |
8 | 2 | 2 |
9 | 5 | 3 |
10 | 5 | 3 |
11 | 6 | 3 |
12 | 9 | 4 |
13 | 9 | 4 |
14 | 10 | 4 |
15 | 10 | 4 |
のような木構造が得られます。(太字は挿入した要素)
以上のルールの下で、図1の配列から図2の配列を作成する方法がわからなくて困っています。
考え方のヒントで良いので教えていただきたいです。
よろしくお願いいたします。
VBA
1Option Explicit 2 3Sub main() 4 Dim tree() As String ' 図1.の木構造配列格納用変数 5 Dim expand_tree() As String ' 図2.の木構造配列格納用変数 6 7 ' 変数treeの初期化 8 Call Initialize(tree) 9 10 ' 処理を記述 11 12 ' 図2.の配列をexpand_treeに取得 13 14End Sub 15 16Sub Initialize(ByRef tree() As String) 17 Dim tmp() As String 18 Dim i As Integer 19 20 ReDim tree(1 To 11, 1 To 3) 21 ReDim tmp(0 To 2) 22 23 For i = 1 To 3 24 tmp() = Split("1,,1", ",") 25 tree(1, i) = tmp(i - 1) 26 Next i 27 28 For i = 1 To 3 29 tmp() = Split("2,,1", ",") 30 tree(2, i) = tmp(i - 1) 31 Next i 32 33 For i = 1 To 3 34 tmp() = Split("3,1,2", ",") 35 tree(3, i) = tmp(i - 1) 36 Next i 37 38 For i = 1 To 3 39 tmp() = Split("4,2,2", ",") 40 tree(4, i) = tmp(i - 1) 41 Next i 42 43 For i = 1 To 3 44 tmp() = Split("5,3,3", ",") 45 tree(5, i) = tmp(i - 1) 46 Next i 47 48 For i = 1 To 3 49 tmp() = Split("6,3,3", ",") 50 tree(6, i) = tmp(i - 1) 51 Next i 52 53 For i = 1 To 3 54 tmp() = Split("7,4,3", ",") 55 tree(7, i) = tmp(i - 1) 56 Next i 57 58 For i = 1 To 3 59 tmp() = Split("8,5,4", ",") 60 tree(8, i) = tmp(i - 1) 61 Next i 62 63 For i = 1 To 3 64 tmp() = Split("9,5,4", ",") 65 tree(9, i) = tmp(i - 1) 66 Next i 67 68 For i = 1 To 3 69 tmp() = Split("10,6,4", ",") 70 tree(10, i) = tmp(i - 1) 71 Next i 72 73 For i = 1 To 3 74 tmp() = Split("11,6,4", ",") 75 tree(11, i) = tmp(i - 1) 76 Next i 77 78End Sub