두 개의 나무가 있습니다. 트리 노드는 다음과 같이 정의됩니다.동등한 하위 트리
class Node{
String treeId;
String type; //Each node has type which has fixed value. For example, its color: RED, BLANK, GREEN
Set<Node> children;
String ref; //The ref is a string and allowed value are "0", "1",..."10". The value is null if it is not leaf.
};
리프의 경우, 자식 세트는 비어 있습니다.
두 개의 주어진 트리에 대해 동등한 substree를 식별하는 방법이 기존에 효율적인 작업이 있는지 궁금합니다. 등가는 다음과 같이 정의됩니다.
1) Both subtree leaves are setsets leaves of original tree.
2) Both subtrees leaves have same ref value.
3) for non-leaves node, the equivalent refers to both node have same type and equivalent children.
감사합니다. 이 문제를 해결하는 Java 라이브러리가 있으면 더 좋을 것입니다.
입력은 두 개의 트리 루트이고 출력은 동등한 하위 트리의 루트 인 노드입니다. 나무의 높이는 100 ~ 500 개가 넘습니다.
내가 지금 한 것은 노드 클래스에 대한 새 필드를 추가 한 것입니다.
class Cache{
Map<String, Set<String>> map = new LinkedHashMap<String, Set<Str>>();
}
값이이 노드 ID의이 노드가 도달 할 수있는 참조 집합 인 동안 노드의 키입니다. 노드가 초기화되면 캐시가 시작됩니다.
isEquivalent 비교 단계에서 두 루트의 참조 집합간에 중첩이 있는지 확인하십시오. 없는 경우는 false를 리턴합니다.
이렇게하면 비교 공간을 줄일 수 있다고 생각합니다.
일부 Java 그래프 API 체크가 필요합니다 [this] (http://stackoverflow.com/questions/745048/looking-for-a-simple-java-api-for-creating-graphs-edges-nodes) – Mifmif
그럼 입력은 무엇입니까?한 나무의 하위 나무 인 두 나무? – bytefire
'입력은 두 개의 트리 루트이고, 출력은 동등한 서브 트리의 루트 인 노드입니다. '두 개의 * 동등한 * 서브 트리는 * 같은 * 서브 트리가 아닙니다. 두 개의 동등한 하위 트리 중 어느 것이 반환되는지가 중요합니까? – bytefire