-isHittingSetTree(_, leaf).
-isHittingSetTree(_, node([], [])).
-isHittingSetTree(VisitedLabels, node([CurLabel|Labels], [CurChild|Children])) :-
- not(member(CurLabel, VisitedLabels)),
- append(VisitedLabels, [CurChild], UpdatedVisitedLabels),
- isHSTree(UpdatedVisitedLabels, CurChild),
- isHSTree(VisitedLabels, node(Labels, Children)).
+:- [diagnosis].\r
+%Function to add variable for uniqueness checking.\r
+isHittingSetTree(Tree) :-\r
+ isHittingSetTree2(Tree, []). \r
+\r
+%When the end of branch has been reached.\r
+isHittingSetTree2(leaf, _). \r
+%When a node turns empty. \r
+isHittingSetTree2(node([], []), _). \r
+%When a node isn't empty.\r
+isHittingSetTree2(node([CurLabel|Labels], [CurChild|Children]), VisitedLabels) :-\r
+ %Check if label has already been used up in the tree.\r
+ not(member(CurLabel,VisitedLabels)),\r
+ %Append label to list of checked labels\r
+ append(VisitedLabels, [CurLabel], UpdatedVisitedLabels), \r
+ %Recursively search into depth of branch.\r
+ isHittingSetTree2(CurChild, Appended), \r
+ %Recursively search into width of node.\r
+ isHittingSetTree2(node(Labels, UpdatedVisitedLabels), VisitedLabels).\r
+%If there are more or less labels then children, the tree will not match and \r
+%the function will rightfully report false.\r