Алгоритм сравнения деревьев в Java - PullRequest
1 голос
/ 02 марта 2020

Я ищу алгоритм для сравнения двух деревьев.

У меня есть этот класс в 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) и проблем с выполнением операций, основанных на автоматическом заполнении дерева (вычисление некоторых условий),

Я вручную заполняю свое дерево и работаю .

Мне нужно выяснить, в чем отличие моего дерева (заполняемого вручную и автоматически) в его узлах (внутри), а не только в том, что это разные деревья. Когда какой-то узел / лист отличается, мне нужно напечатать его содержимое.

Но я не знаю, как начать с алгоритма сравнения.

...