public IEnumerable <IBinaryTreeNode <TItem> > TraversePreOrder() { var nodes = new List <IBinaryTreeNode <TItem> >(); if (LeftNode != null) { nodes.AddRange(LeftNode.TraversePreOrder()); } nodes.Add(this); if (RightNode != null) { nodes.AddRange(RightNode.TraversePreOrder()); } return(nodes); }