Я ищу алгоритм для сравнения двух деревьев.
У меня есть этот класс в Java
public class TreeNodeDSP {
TreeNodeDSP parent;
List<TreeNodeDSP> children;
NodeDSP value;
public TreeNodeDSP(TreeNodeDSP parent) {
this.parent = parent;
children = new ArrayList<>();
}
public TreeNodeDSP(TreeNodeDSP parent, NodeDSP value) {
this.parent = parent;
children = new ArrayList<>();
this.value = value;
}
public void addChild(TreeNodeDSP node) {
if (node != null && node.getValue() != null) {
if (children.stream().noneMatch(child -> Objects.equals(child.getValue(), node.getValue()))) {
children.add(node);
}
}
}
public TreeNodeDSP getParent() {
return parent;
}
public void cleanChildren() {
children = new ArrayList<>();
}
public int getChildrenCount() {
return children.size();
}
public TreeNodeDSP getChildrenAt(int position) {
if (children.size() > position && position > -1) {
return children.get(position);
}
return null;
}
public List<TreeNodeDSP> getChildren() {
return children;
}
public NodeDSP getValue() {
return value;
}
public boolean isLeaf() {
return children.isEmpty();
}
}
Я думаю, что код класса NodeDSP
не нужен.
Теперь у меня есть алгоритм для заполнения моего дерева (TreeNodeDSP
) и проблем с выполнением операций, основанных на автоматическом заполнении дерева (вычисление некоторых условий),
Я вручную заполняю свое дерево и работаю .
Мне нужно выяснить, в чем отличие моего дерева (заполняемого вручную и автоматически) в его узлах (внутри), а не только в том, что это разные деревья. Когда какой-то узел / лист отличается, мне нужно напечатать его содержимое.
Но я не знаю, как начать с алгоритма сравнения.