c#中如何用递归方法建立一个二叉树

解决方案 »

  1.   

    - -关于循环和分支c#和c有区别么。数据结构上的用c建立二叉树,基本不用改就成c#了吧
      

  2.   


            /// <summary>
            /// 创建二叉树
            /// </summary>
            /// <param name="tree"></param>
            /// <param name="value"></param>
            /// <param name="curIndex">从0开始</param>
            void CreateTree(Tree tree, object[] value, int curIndex)
            {
                if (curIndex < value.Length)
                {
                    //创建
                    tree.Value = value[curIndex];
                    tree.Index = curIndex;
                    
                    if (curIndex * 2 + 1 < value.Length)
                    {
                        CreateTree(tree.Left, value, curIndex * 2 + 1);
                    }
                    else if (curIndex * 2 + 2 < value.Length)
                    {
                        CreateTree(tree.Right, value, curIndex * 2 + 2);
                    }
                }
            }
      

  3.   

            struct Tree
            {
                public int Index = -1;
                public Tree Left;
                public Tree Right;
                public object Value;
            }
      

  4.   

    参考: using System;
     public class Node
     {
         //成员变量
         private object _data; //数据
        private Node _left; //左孩子
         private Node _right; //右孩子
         public object Data
        {
             get { return _data; }
         }
        public Node Left //左孩子
         {
             get { return _left; }
            set { _left = value; }
         }
         public Node Right //右孩子
         {
            get { return _right; }
            set { _right = value; }
         }
         //构造方法
         public Node(object data)
         {
             _data = data;
        }
        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); //给头结点添加孩子结点
         }
        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()); //打印字符
             }
         }
     }