【2019】Tree的結構類:二叉樹結點類

自定義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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章