/// <summary> /// Visit the nodes of the tree (right then left) and populate some data structures /// </summary> /// <param name="info"></param> private void PopulateData(ShortCircuitInfo info) { // Is our right child a leaf or another And/Or expression? AndOrElement andOrChild = MyRightChild as AndOrElement; if (andOrChild == null) { // Leaf so push it on the stack info.Operands.Push(MyRightChild); } else { // Another And/Or expression so recurse andOrChild.PopulateData(info); } // Add ourselves as an operator info.Operators.Push(this); // Do the same thing for the left child andOrChild = MyLeftChild as AndOrElement; if (andOrChild == null) { info.Operands.Push(MyLeftChild); } else { andOrChild.PopulateData(info); } }