private IEnumerable <ISymbolicExpressionTreeNode> IterateBreadthOrdered(ISymbolicExpressionTreeNode node, ISymbolicExpressionTreeNodeComparer comparer)
        {
            var list = new List <ISymbolicExpressionTreeNode> {
                node
            };
            int i = 0;

            while (i < list.Count)
            {
                var n = list[i];
                if (n.SubtreeCount > 0)
                {
                    var subtrees = commutativeSymbols.Contains(node.Symbol.Name) ? n.Subtrees.OrderBy(x => x, comparer) : n.Subtrees;
                    list.AddRange(subtrees);
                }
                i++;
            }
            return(list);
        }
 private IEnumerable<ISymbolicExpressionTreeNode> IterateBreadthOrdered(ISymbolicExpressionTreeNode node, ISymbolicExpressionTreeNodeComparer comparer) {
   var list = new List<ISymbolicExpressionTreeNode> { node };
   int i = 0;
   while (i < list.Count) {
     var n = list[i];
     if (n.SubtreeCount > 0) {
       var subtrees = commutativeSymbols.Contains(node.Symbol.Name) ? n.Subtrees.OrderBy(x => x, comparer) : n.Subtrees;
       list.AddRange(subtrees);
     }
     i++;
   }
   return list;
 }