AIMA.Core.Probability.BayesNet.getVariableNodes C# (CSharp) Method

getVariableNodes() private method

private getVariableNodes ( ) : List
return List
        private List<BayesNetNode> getVariableNodes()
        {
            // TODO dicey initalisation works fine but unclear . clarify
            if (variableNodes == null)
            {
                List<BayesNetNode> newVariableNodes = new List<BayesNetNode>();
                List<BayesNetNode> parents = roots;
                List<BayesNetNode> traversedParents = new List<BayesNetNode>();

                while (parents.Count != 0)
                {
                    List<BayesNetNode> newParents = new List<BayesNetNode>();
                    foreach (BayesNetNode parent in parents)
                    {
                        // if parent unseen till now
                        if (!(traversedParents.Contains(parent)))
                        {
                            newVariableNodes.Add(parent);
                            // add any unseen children to next generation of parents
                            List<BayesNetNode> children = parent.getChildren();
                            foreach (BayesNetNode child in children)
                            {
                                if (!newParents.Contains(child))
                                {
                                    newParents.Add(child);
                                }
                            }
                            traversedParents.Add(parent);
                        }
                    }

                    parents = newParents;
                }
                variableNodes = newVariableNodes;
            }

            return variableNodes;
        }