二叉树算法

#region 二叉树算法
//using System;
 public class Node
  {
      //成员变量
      private object _data; //数据
      private Node _left; //左孩子
      private Node _right; //右孩子

     /// <summary>
     /// 数组对像
     /// </summary>
      public object Data
      {
         get { return _data; }
     }
     /// <summary>
     /// 左孩子
     /// </summary>
     public Node Left
     {
        get { return _left; }
         set { _left = value; }
     }
     /// <summary>
     /// 右孩子
     /// </summary>
     public Node Right
     {
         get { return _right; }
         set { _right = value; }
     }
     /// <summary>
     /// 构造方法
     /// </summary>
     /// <param name=”data”></param>
     public Node(object data)
     {
         _data = data;
     }
     /// <summary>
     /// 重写ToString方法
     /// </summary>
     /// <returns></returns>
     public override string ToString()
    {
         return _data.ToString();
     }
 }
//using System;
 public class BinaryTree
 {    //成员变量
     private Node _head; //头指针
     private string cStr; //用于构造二叉树的字符串
     public Node Head //头指针
      {
         get { return _head; }
      }
      //构造方法
     public BinaryTree(string constructStr)
      {
          cStr = constructStr;
          _head = new Node(cStr[0]); //添加头结点
          Add(_head, 0); //给头结点添加孩子结点
      }
     /// <summary>
     /// 添加一个节点
     /// </summary>
     /// <param name=”parent”></param>
     /// <param name=”index”></param>
      private void Add(Node parent, int index)
      {
         int leftIndex = 2 * index + 1; //计算左孩子索引
          if (leftIndex < cStr.Length) //如果索引没超过字符串长度
         {
             if (cStr[leftIndex] != ‘#’) //’#’表示空结点
              {   //添加左孩子
                 parent.Left = new Node(cStr[leftIndex]);
                 //递归调用Add方法给左孩子添加孩子节点
                 Add(parent.Left, leftIndex);
             }
         }
          int rightIndex = 2 * index + 2;
         if (rightIndex < cStr.Length)
          {
             if (cStr[rightIndex] != ‘#’)
              {   //添加右孩子
                  parent.Right = new Node(cStr[rightIndex]);
                 //递归调用Add方法给右孩子添加孩子节点
                  Add(parent.Right, rightIndex);
             }
          }
      }
      public void PreOrder(Node node) //先序遍历
      {
          if (node != null)
          {
              Console.Write(node.ToString()); //打印字符
              PreOrder(node.Left); //递归
              PreOrder(node.Right); //递归
          }
      }
      public void MidOrder(Node node) //中序遍历
      {
          if (node != null)
          {
              MidOrder(node.Left); //递归
             Console.Write(node.ToString()); //打印字符
              MidOrder(node.Right); //递归
          }
     }
      public void AfterOrder(Node node) //后继遍历
      {
          if (node != null)
          {
             AfterOrder(node.Left); //递归
              AfterOrder(node.Right); //递归
              Console.Write(node.ToString()); //打印字符
          }
     }
  }
 

#endregion

点赞