-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathFileSystemTree.java
44 lines (36 loc) · 1.15 KB
/
FileSystemTree.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package by.andd3dfx.tree;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.util.List;
/**
* Предложить структуру данных, чтобы хранить в ней структуру папок и файлов.
* <p>
* Описать алгоритм, который измерит размер содержимого определенной папки.
*
* @see <a href="https://www.youtube.com/watch?v=j6wr8qCaVeE">Video solution</a>
*/
public class FileSystemTree {
@Builder
@AllArgsConstructor
public static class Node {
private List<Node> children;
private NodeType type;
private Long size;
public long calcSize() {
return calcSize(this);
}
public static long calcSize(Node node) {
if (node.type == NodeType.FILE) {
return node.size;
}
var result = 0;
for (var child : node.children) {
result += calcSize(child);
}
return result;
}
}
public enum NodeType {
FILE, FOLDER
}
}