Ich muss den Abstand zwischen zwei Knoten in einem Baum berechnen. I implementiert die allgemeine Formel:Abstand zwischen zwei Knoten in einem Baumalgorithmus Problem
Dist(n1,n2) = Dist(root,n1), Dist(root,n2) - 2*Dist(root,lca)
Der Code funktioniert für die meisten der Eingabe, aber wenn ich mit (Vater, Sohn) versuche ich den falschen Abstand zu bekommen. Hier ist mein Code:
public static int distance(Tree t, Node<String> node1, Node<String> node2)
{
Node<String> lca = lca(node1, node2);
//This if statement is when the input contains the root itself
//this means that the distance is simply from the node and the root
if(lca==null)
{
// the function getNumberOfAncestors returns exactly the distance between a generic node and the root, since I count parent by parent and so on.
return node1.getNumberOfAncestors() + node2.getNumberOfAncestors();
}
return node1.getNumberOfAncestors() + node2.getNumberOfAncestors() - 2*distance(t, t.getRoot(), lca);
}
Für den einfachen Baum:
A
B C
D E F G
Wir wissen, dass die Dist (C, G) = 1, aber mein Algorithmus 3. Irgendwelche Ideen zurückkehrt?
ausprobieren BFS. Es ist tot einfach, gut dokumentiert, und wird Ihnen auch den kürzesten Weg zwischen einem Startknoten und jedem anderen Knoten geben. – beatngu13
Zum Debuggen sollten Sie zunächst node1.getNumberOfAncestors(), node2.getNumberOfAncestors() und distance (t, t.getRoot(), lca) drucken. Um zu sehen, ob alle 3 Werte korrekt sind. Bearbeiten: Gibt es auch einen Grund, warum Sie getNumberOfAncestors() nicht auf lca verwenden? –