using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Tree where TItem : IComparable {
public Tree(TItem nodeValue) {
this.NodeData = nodeValue;
this.LeftTree = null;
this.RightTree = null;
}
public void Insert(TItem newItem) {
TItem currentNodeValue = this.NodeData;
if (currentNodeValue.CompareTo(newItem) > 0) {
if (this.LeftTree == null) {
this.LeftTree = new Tree(newItem);
} else {
this.LeftTree.Insert(newItem);
}
} else {
if (this.RightTree == null) {
this.RightTree = new Tree(newItem);
} else {
this.RightTree.Insert(newItem);
}
}
}
public void WalkTree() {
if (this.LeftTree != null) {
this.LeftTree.WalkTree();
}
Console.WriteLine(this.NodeData.ToString());
if (this.RightTree != null) {
this.RightTree.WalkTree();
}
}
public TItem NodeData { get; set; }
public Tree LeftTree { get; set; }
public Tree RightTree { get; set; }
}
class Program {
static void Main(string[] args) {
Tree charTree = new Tree('M');
InsertIntoTree(charTree, 'X', 'A', 'M', 'Z', 'Z', 'N');
charTree.WalkTree();
}
static void InsertIntoTree(Tree tree, params T[] data) where T : IComparable {
if (data.Length == 0)
throw new ArgumentException("Must provide at least one data value");
foreach (T datum in data) {
tree.Insert(datum);
}
}
}