自定義Tree結構類
public class MyNode { private object _name; private MyNode _left; private MyNode _right; public MyNode(object name) { _name = name; } public object Name { get { return _name; } } public MyNode Left { get { return _left; } set { _left = value;} } public MyNode Right { get { return _right; } set { _right = value; } } public override string ToString() { return _name.ToString(); } } public class MyBinaryTree { private MyNode _heard;//指針 private string cStr;//構造二叉樹字符串 public MyBinaryTree(string constructCstr) { cStr = constructCstr; if (cStr.Length > 0) { _heard = new MyNode(cStr[0]); this.Add(_heard, 0); } } public void Add(MyNode myNode, int index) { int leftIndex = 2 * index + 1; if (leftIndex < cStr.Length) { myNode.Left = new MyNode(cStr[leftIndex]); this.Add(myNode.Left, leftIndex); } int rightIndex = 2 * index + 2; if (rightIndex < cStr.Length) { myNode.Right = new MyNode(cStr[rightIndex]); this.Add(myNode.Right, rightIndex); } } #region propety public MyNode Heard { get {return _heard; } } #endregion #region Method public void PreOrder(MyNode node) //先序遍歷 { if (node != null) { Console.Write(node.ToString()); //打印字符 PreOrder(node.Left); //遞歸 PreOrder(node.Right); //遞歸 } } public void MidOrder(MyNode node) //中序遍歷 { if (node != null) { MidOrder(node.Left); //遞歸 Console.Write(node.ToString()); //打印字符 MidOrder(node.Right); //遞歸 } } public void AfterOrder(MyNode node) //後繼遍歷 { if (node != null) { AfterOrder(node.Left); //遞歸 AfterOrder(node.Right); //遞歸 Console.Write(node.ToString()); //打印字符 } } public void LevelOrder() //寬度優先遍歷 { Queue queue = new Queue(); //聲明一個隊例 queue.Enqueue(_head); //把根結點壓入隊列 while (queue.Count > 0) //只要隊列不爲空 { Node node = (Node)queue.Dequeue(); //出隊 Console.Write(node.ToString()); //訪問結點 if (node.Left != null) //如果結點左孩子不爲空 { //把左孩子壓入隊列 queue.Enqueue(node.Left); } if (node.Right != null) //如果結點右孩子不爲熔 { //把右孩子壓入隊列 queue.Enqueue(node.Right); } } } #endregion }
MyBinaryTree myBinaryTree = new MyBinaryTree("ABCDE#F"); myBinaryTree.PreOrder(myBinaryTree.Heard); myBinaryTree.MidOrder(myBinaryTree.Heard); myBinaryTree.AfterOrder(myBinaryTree.Heard); //使用字符串構造二叉樹 myBinaryTree.LevelOrder();
參考:
二叉樹結點類http://www.cnblogs.com/abatei/archive/2008/05/23/1205707.html