Csharp/C Sharp/Generics/Generic Tree
Generic Binary Tree
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<TItem> where TItem : IComparable<TItem> {
public Tree(TItem nodeValue) {
this.NodeData = nodeValue;
this.LeftTree = null;
this.RightTree = null;
}
public void Insert(TItem newItem) {
TItem currentNodeValue = this.NodeData;
if (currentNodeValue.rupareTo(newItem) > 0) {
if (this.LeftTree == null) {
this.LeftTree = new Tree<TItem>(newItem);
} else {
this.LeftTree.Insert(newItem);
}
} else {
if (this.RightTree == null) {
this.RightTree = new Tree<TItem>(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<TItem> LeftTree { get; set; }
public Tree<TItem> RightTree { get; set; }
}
class Program {
static void Main(string[] args) {
Tree<char> charTree = new Tree<char>("M");
InsertIntoTree<char>(charTree, "X", "A", "M", "Z", "Z", "N");
charTree.WalkTree();
}
static void InsertIntoTree<T>(Tree<T> tree, params T[] data) where T : IComparable<T> {
if (data.Length == 0)
throw new ArgumentException("Must provide at least one data value");
foreach (T datum in data) {
tree.Insert(datum);
}
}
}
Generic TreeNode
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
public class Employee {
private int _id = 0;
private string _name = null;
public Employee(int id, string name) {
this._id = id;
this._name = name;
}
public int Id {
get { return this._id; }
}
public string Name {
get { return this._name; }
}
public override string ToString() {
return this._name;
}
}
public class TreeNode<T> {
private T _nodeData;
private ArrayList _childNodes;
public TreeNode(T nodeData) {
this._nodeData = nodeData;
this._childNodes = new ArrayList();
}
public T Data {
get { return this._nodeData; }
}
public TreeNode<T>[] Children {
get { return (TreeNode<T>[])this._childNodes.ToArray(typeof(TreeNode<T>)); }
}
public TreeNode<T> this[int index] {
get { return (TreeNode<T>)this._childNodes[index]; }
}
public TreeNode<T> AddChild(T nodeData) {
TreeNode<T> newNode = new TreeNode<T>(nodeData);
this._childNodes.Add(newNode);
return newNode;
}
public override string ToString() {
return this._nodeData.ToString();
}
}
class Program {
static void Main(string[] args) {
TreeNode<Employee> rootNode = new TreeNode<Employee>(new Employee(111, "H"));
TreeNode<Employee> child1 = rootNode.AddChild(new Employee(222, "B"));
rootNode.AddChild(new Employee(333, "T"));
child1.AddChild(new Employee(444, "B"));
child1.AddChild(new Employee(555, "M"));
}
}
Walk through a tree recursively
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<TItem> where TItem : IComparable<TItem> {
public Tree(TItem nodeValue) {
this.NodeData = nodeValue;
this.LeftTree = null;
this.RightTree = null;
}
public void Insert(TItem newItem) {
TItem currentNodeValue = this.NodeData;
if (currentNodeValue.rupareTo(newItem) > 0) {
if (this.LeftTree == null) {
this.LeftTree = new Tree<TItem>(newItem);
} else {
this.LeftTree.Insert(newItem);
}
} else {
if (this.RightTree == null) {
this.RightTree = new Tree<TItem>(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<TItem> LeftTree { get; set; }
public Tree<TItem> RightTree { get; set; }
}
class Program {
static void Main(string[] args) {
Tree<int> tree1 = new Tree<int>(10);
tree1.Insert(5);
tree1.Insert(1);
tree1.Insert(15);
tree1.Insert(-2);
tree1.Insert(115);
tree1.Insert(10);
tree1.Insert(114);
tree1.Insert(-18);
tree1.Insert(1110);
tree1.Insert(81);
tree1.Insert(18);
tree1.WalkTree();
Tree<string> tree2 = new Tree<string>("Hello");
tree2.Insert("A");
tree2.Insert("B");
tree2.Insert("C");
tree2.Insert("D");
tree2.Insert("E");
tree2.Insert("F");
tree2.Insert("G");
tree2.Insert("H");
tree2.Insert("I");
tree2.Insert("J");
tree2.Insert("K");
tree2.WalkTree();
}
}