def contains(node, target, seen=set()): if node["id"] in seen: return False seen.add(node["id"]) if node["id"] == target: return True return any(contains(child, target, seen) for child in node["children"])