class Node {
public int val;
public List<Node> children;
Node(int val) {
this.val = val;
this.children = new ArrayList<>();
}
}
Parcours
Profondeur d’abord
boolean contains(Node n, int val) {
if(n.val == val) return true;
for(Node fils : n.children) {
boolean rep = contains(fils, val);
if(rep) return true;
}
return false;
}
int treeDepth(Node n, int level) {
if(n.children.isEmpty()) return level;
int nnDepth = 0;
for(Node fils : n.children) {
int d = treeDepth(fils, level+1);
if(d > maxDepth) maxDepth = d;
}
return maxDepth;
}
int treeDepth(Node n) {
if(n.children.isEmpty()) return 1;
int maxDepth = 0;
for(Node fils : n.children) {
int d = treeDepth(fils);
if(d > maxDepth) maxDepth = d;
}
return maxDepth + 1;
}
int nbLeaves(Node n) {
if(n.children.isEmpty()) return 1;
int nb = 0;
for(Node fils : n.children) {
nb += nbLeaves(fils);
}
return nb;
}
Largeur d’abord
boolean contains(Node n, int val) {
if(n.val == val) return true;
Queue<Node> queue = new ArrayDeque<>();
for(Node fils : n.children) {
queue.offer(fils);
}
while(!queue.isEmpty()) {
Node p = queue.poll();
if(p.val == val) return true;
queue.addAll(p.children);
}
return false;
}
List<Node> getNodesForLevel(Node n, int level) {
List<Node> list = new ArrayList<>();
if(level == 0) list.add(n);
else if(level > 0) {
int curLevel = 1;
Node separ = new Node(-9999);
Queue<Node> queue = new ArrayDeque<>();
for (Node f : n.children) queue.offer(f);
queue.offer(separ);
while(!queue.isEmpty()) {
Node p = queue.poll();
if(p == separ) {
if(curLevel == level) return list;
curLevel += 1;
queue.offer(separ);
}
}
} else {
if(curLevel == level) {
list.add(p);
} else {
for(Node f : p.children)
queue.offer(f);
}
}
return list;
}