class Node
{
public Node LeftNode;
public Node RightNode;
public T Item;
}
public class BinaryTree
{
Node _root;
public void Add(params T[] items) { foreach (var i in items) Add(i); }
public void Add(T item) { /* 標準 BST 插入邏輯 */ }
}
public IEnumerable InOrder
{
get { return ScanInOrder(_root); }
}
IEnumerable ScanInOrder(Node root)
{
if (root.LeftNode != null)
{
foreach (T item in ScanInOrder(root.LeftNode))
yield return item;
}
yield return root.Item;
if (root.RightNode != null)
{
foreach (T item in ScanInOrder(root.RightNode))
yield return item;
}
}
var tree = new BinaryTree();
tree.Add(4, 6, 2, 7, 5, 3, 1);
foreach (int num in tree.InOrder)
Trace.WriteLine(num); // 輸出 1,2,3,4,5,6,7
同理新增 `PreOrder`、`PostOrder` 屬性,調整 `yield return` 位置: