static IEnumerable <CodePair> GetLeaves(Node node, string currentString) { if (node.IsLeaf()) { yield return(new CodePair() { ch = node.ch, code = currentString }); } else { foreach (var leaf in GetLeaves(node.left, currentString + "0")) { yield return(leaf); } foreach (var leaf in GetLeaves(node.right, currentString + "1")) { yield return(leaf); } } }