最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > asp教程

C#实现的BinaryTree技巧

日期:07-20    来源:中国设计秀    作者:cnwebshow.com

确切的说,该二叉树更类似于二叉排序树,在判断了节点是否可以进行比较操作后,根据给定的比较操作进行节点的插入。InV中国设计秀
InV中国设计秀
using  System;InV中国设计秀
using  System.Collections;InV中国设计秀
InV中国设计秀
namespace  SEI.DL88250.SourceCodes.BinaryTreeInV中国设计秀
{InV中国设计秀
     ///   <summary> 二叉树节点类 </summary> InV中国设计秀
     class  TreeNodeInV中国设计秀
    {InV中国设计秀
         ///   <summary> 当前节点的出现计数 </summary> InV中国设计秀
         PRivate   int  _occurs;InV中国设计秀
         ///   <summary> 当前节点值 </summary> InV中国设计秀
         private   object  _nval;InV中国设计秀
         ///   <summary> 左孩子节点 </summary> InV中国设计秀
         private  TreeNode _lchild;InV中国设计秀
         ///   <summary> 右孩子节点 </summary> InV中国设计秀
         private  TreeNode _rchild;InV中国设计秀
InV中国设计秀
         ///   <value> 设置/返回右孩子节点 </value> InV中国设计秀
         ///   <remarks> 设置/返回InV中国设计秀
         ///   <see cref="_rchild"/> 字段InV中国设计秀
         ///   </remarks> InV中国设计秀
         public  TreeNode RightChild InV中国设计秀
        {InV中国设计秀
             get  {  return  _rchild; }InV中国设计秀
             set  { _rchild  =  (TreeNode)value; }InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <value> 设置/返回左孩子节点 </value> InV中国设计秀
         ///   <remarks> 设置返回InV中国设计秀
         ///   <see cref="_lchild"/> 字段InV中国设计秀
         ///   </remarks> InV中国设计秀
         public  TreeNode LeftChild InV中国设计秀
        {InV中国设计秀
             get  {  return  _lchild; }InV中国设计秀
             set  { _lchild  =  (TreeNode)value; }InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <value> 返回当前节点值 </value> InV中国设计秀
         ///   <remarks> 返回InV中国设计秀
         ///   <see cref="_nval"/> 字段InV中国设计秀
         ///   </remarks> InV中国设计秀
         public   object  Value {  get  {  return  _nval; } }InV中国设计秀
InV中国设计秀
         ///   <summary> 构造一个二叉树节点 </summary> InV中国设计秀
         ///   <param name="val"> 节点对象 </param> InV中国设计秀
         public  TreeNode( object  val)InV中国设计秀
        {InV中国设计秀
            _nval  =  val;InV中国设计秀
            _occurs  =   1 ;InV中国设计秀
            _rchild  =  _lchild  =   null ;InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 在二叉树中查找指定对象 </summary> InV中国设计秀
         ///   <param name="val"> 待查对象 </param> InV中国设计秀
         ///   <remarks> 用尾递归方式进行查找 </remarks> InV中国设计秀
         ///   <returns> InV中国设计秀
         ///      <list> InV中国设计秀
         ///          <item> null: 说明未找到待查对象 </item> InV中国设计秀
         ///          <item> this: 待查对象 </item> InV中国设计秀
         ///          <item> _lchild.FindValue(val): 左子树递归查找 </item> InV中国设计秀
         ///          <item> _rchild.FindValue(val): 右子树递归查找 </item> InV中国设计秀
         ///      </list> InV中国设计秀
         ///   </returns> InV中国设计秀
         public  TreeNode FindValue( object  val)InV中国设计秀
        {InV中国设计秀
            IComparable ic  =  val  as  IComparable;InV中国设计秀
InV中国设计秀
             if  ( 0   ==  ic.CompareTo(_nval))InV中国设计秀
            { //  找到! InV中国设计秀
                 return   this ;InV中国设计秀
            }InV中国设计秀
InV中国设计秀
             if  (ic.CompareTo(_nval)  <   0 )InV中国设计秀
            { //  到左子树中查找 InV中国设计秀
                 if  ( null   ==  _lchild)InV中国设计秀
                {InV中国设计秀
                     return   null ;InV中国设计秀
                }InV中国设计秀
                 return  _lchild.FindValue(val);InV中国设计秀
            }InV中国设计秀
             else //  到右子树中查找 InV中国设计秀
            {InV中国设计秀
                 if  ( null   ==  _rchild)InV中国设计秀
                {InV中国设计秀
                     return   null ;InV中国设计秀
                }InV中国设计秀
                 return  _rchild.FindValue(val);InV中国设计秀
            }InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 插入对象到二叉树中 </summary> InV中国设计秀
         ///   <remarks> 用尾递归方式进行插入 </remarks> InV中国设计秀
         ///   <param name="val"> 要插入的对象 </param> InV中国设计秀
         public   void  InsertValue( object  val)InV中国设计秀
        {InV中国设计秀
            IComparable ic  =  val  as  IComparable;InV中国设计秀
InV中国设计秀
             if  ( 0   ==  ic.CompareTo(_nval))InV中国设计秀
            {InV中国设计秀
                _occurs ++ ;InV中国设计秀
                 return ;InV中国设计秀
            }InV中国设计秀
InV中国设计秀
             if  (ic.CompareTo(_nval)  <   0 )InV中国设计秀
            { //  插入到左子树 InV中国设计秀
                 if  ( null   ==  _lchild)InV中国设计秀
                {InV中国设计秀
                    _lchild  =   new  TreeNode(val);InV中国设计秀
                }InV中国设计秀
                 else InV中国设计秀
                {InV中国设计秀
                    _lchild.InsertValue(val);InV中国设计秀
                }InV中国设计秀
            }InV中国设计秀
             else InV中国设计秀
            { //  插入到右子树  InV中国设计秀
                 if  ( null   ==  _rchild)InV中国设计秀
                {InV中国设计秀
                    _rchild  =   new  TreeNode(val);InV中国设计秀
                }InV中国设计秀
                 else InV中国设计秀
                {InV中国设计秀
                    _rchild.InsertValue(val);InV中国设计秀
                }InV中国设计秀
            }InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 设置左子树叶子节点为指定对象值 </summary> InV中国设计秀
         ///   <remarks> 这个方法主要用于删除节点的操作 </remarks> InV中国设计秀
         ///   <param name="leaf"> 要设置的节点值 </param> InV中国设计秀
         ///   <param name="subtree"> 左子树根节点 </param> InV中国设计秀
         public   static   void  LchildLeaf(TreeNode leaf, TreeNode subtree)InV中国设计秀
        {InV中国设计秀
             while  (subtree._lchild  !=   null )InV中国设计秀
            {InV中国设计秀
                subtree  =  subtree._lchild;InV中国设计秀
            }InV中国设计秀
            subtree._lchild  =  leaf;InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 删除指定对象 </summary> InV中国设计秀
         ///   <remarks> 用尾部递归方式删除 </remarks> InV中国设计秀
         ///   <param name="val"> 要删除的对象 </param> InV中国设计秀
         ///   <param name="prev"> 要删除节点的前一个节点 </param> InV中国设计秀
         ///   <returns> InV中国设计秀
         ///      <list> InV中国设计秀
         ///          <item> false: 说明未找到待删除对象 </item> InV中国设计秀
         ///          <item> _lchild.RemoveValue(val, ref _lchild): 左子树递归删除 </item> InV中国设计秀
         ///          <item> _rchild.RemoveValue(val, ref _rchild): 右子树递归删除 </item> InV中国设计秀
         ///      </list> InV中国设计秀
         ///   </returns> InV中国设计秀
         public   bool  RemoveValue( object  val,  ref  TreeNode prev)InV中国设计秀
        {InV中国设计秀
            IComparable ic  =  val  as  IComparable;InV中国设计秀
             if  ( 0   ==  ic.CompareTo(_nval))InV中国设计秀
            {InV中国设计秀
                 if  (_rchild  !=   null )InV中国设计秀
                {InV中国设计秀
                    prev  =  _rchild;InV中国设计秀
                     if  (_lchild  !=   null )InV中国设计秀
                    {InV中国设计秀
                         if  ( null   ==  prev._lchild)InV中国设计秀
                        {InV中国设计秀
                            prev._lchild  =  _lchild;InV中国设计秀
                        }InV中国设计秀
                         else InV中国设计秀
                        {InV中国设计秀
                            LchildLeaf(_lchild, prev._lchild);InV中国设计秀
                        }InV中国设计秀
                    }InV中国设计秀
                }InV中国设计秀
                 else InV中国设计秀
                {InV中国设计秀
                    prev  =  _lchild;InV中国设计秀
                }InV中国设计秀
            }InV中国设计秀
InV中国设计秀
             if  (ic.CompareTo(_nval)  <   0 )InV中国设计秀
            {InV中国设计秀
                 if  ( null   ==  _lchild)InV中国设计秀
                {InV中国设计秀
                     return   false ;InV中国设计秀
                }InV中国设计秀
                 return  _lchild.RemoveValue(val,  ref  _lchild);InV中国设计秀
            }InV中国设计秀
             else InV中国设计秀
            {InV中国设计秀
                 if  ( null   ==  _rchild)InV中国设计秀
                {InV中国设计秀
                     return   false ;InV中国设计秀
                }InV中国设计秀
                 return  _rchild.RemoveValue(val,  ref  _rchild);InV中国设计秀
            }InV中国设计秀
        }InV中国设计秀
    }InV中国设计秀
}InV中国设计秀
using  System;InV中国设计秀
InV中国设计秀
namespace  SEI.DL88250.SourceCodes.BinaryTreeInV中国设计秀
{InV中国设计秀
     ///   <summary> 二叉树类 </summary> InV中国设计秀
     class  BinaryTreeInV中国设计秀
    {InV中国设计秀
         ///   <summary> 节点类型 </summary> InV中国设计秀
         private  Type _elemType;InV中国设计秀
         ///   <summary> 根节点 </summary> InV中国设计秀
         private  TreeNode _root;InV中国设计秀
        InV中国设计秀
         // private Action _nodeAction;InV中国设计秀
         // public delegate void Action(ref TreeNode node); InV中国设计秀
InV中国设计秀
         ///   <summary> 插入一个节点到二叉树中 </summary> InV中国设计秀
         ///   <param name="elem"> 待插入的节点 </param> InV中国设计秀
         public   void  Insert( object  elem)InV中国设计秀
        {InV中国设计秀
             //  判断是否是根节点 InV中国设计秀
             if  ( null   ==  _root)InV中国设计秀
            {InV中国设计秀
                ConfirmComparable(elem);InV中国设计秀
                _elemType  =  elem.GetType();InV中国设计秀
                _root  =   new  TreeNode(elem);InV中国设计秀
            }InV中国设计秀
             else //  是叶子节点 InV中国设计秀
            {InV中国设计秀
                ConfirmType(elem);InV中国设计秀
                _root.InsertValue(elem);InV中国设计秀
            }InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 删除根节点 </summary> InV中国设计秀
         ///   <returns> InV中国设计秀
         ///      <list> InV中国设计秀
         ///          <item> false: 说明当前树为空 </item> InV中国设计秀
         ///          <item> ture: 删除根节点成功 </item> InV中国设计秀
         ///      </list> InV中国设计秀
         ///   </returns> InV中国设计秀
         private   bool  RemoveRoot()InV中国设计秀
        {InV中国设计秀
             if  ( null   ==  _root)InV中国设计秀
            {InV中国设计秀
                 return   false ;InV中国设计秀
            }InV中国设计秀
InV中国设计秀
            TreeNode tmp  =  _root;InV中国设计秀
             if  (_root.RightChild  !=   null )InV中国设计秀
            {InV中国设计秀
                _root  =  _root.RightChild;InV中国设计秀
                TreeNode lc  =  tmp.LeftChild;InV中国设计秀
                TreeNode newlc  =  _root.LeftChild;InV中国设计秀
InV中国设计秀
                 if  (lc  !=   null )InV中国设计秀
                {InV中国设计秀
                     if  ( null   ==  newlc)InV中国设计秀
                    {InV中国设计秀
                        _root.LeftChild  =  lc;InV中国设计秀
                    }InV中国设计秀
                     else InV中国设计秀
                    {InV中国设计秀
                        TreeNode.LchildLeaf(lc, newlc);InV中国设计秀
                    }InV中国设计秀
                }InV中国设计秀
            }InV中国设计秀
             else InV中国设计秀
            {InV中国设计秀
                _root  =  _root.LeftChild;InV中国设计秀
            } InV中国设计秀
             return   true ;InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 删除指定对象的节点 </summary> InV中国设计秀
         ///   <param name="elem"> 给定对象 </param> InV中国设计秀
         ///   <returns> InV中国设计秀
         ///      <list> InV中国设计秀
         ///          <item> false: 说明当前树为空 </item> InV中国设计秀
         ///          <item> _root.RemoveValue(elem, ref _root): 尾部递归删除节点 </item> InV中国设计秀
         ///      </list> InV中国设计秀
         ///   </returns> InV中国设计秀
         public   bool  Remove( object  elem)InV中国设计秀
        {InV中国设计秀
             if  (_root  ==   null )InV中国设计秀
            {InV中国设计秀
                 return   false ;InV中国设计秀
            }InV中国设计秀
            IComparable ic  =  ConfirmComparable(elem);InV中国设计秀
            ConfirmType(elem);InV中国设计秀
InV中国设计秀
             if  ( 0   ==  ic.CompareTo(_root.Value))InV中国设计秀
            {InV中国设计秀
                 return  RemoveRoot();InV中国设计秀
            }InV中国设计秀
             return  _root.RemoveValue(elem,  ref  _root);InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 查找与给定对象相同的节点 </summary> InV中国设计秀
         ///   <param name="elem"> 给定对象 </param> InV中国设计秀
         ///   <returns> InV中国设计秀
         ///      <list> InV中国设计秀
         ///          <item> null: 说明没有找到 </item> InV中国设计秀
         ///          <item> _root.FindValue(elem): 尾部递归查找方法 </item> InV中国设计秀
         ///      </list> InV中国设计秀
         ///   </returns> InV中国设计秀
         public  TreeNode Find( object  elem)InV中国设计秀
        {InV中国设计秀
             if  ( null   ==  _root)InV中国设计秀
            {InV中国设计秀
                 return   null ;InV中国设计秀
            }InV中国设计秀
            ConfirmType(elem);InV中国设计秀
             return  _root.FindValue(elem);InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 查看给定对象类型是否与二叉树节点类型相同 </summary> InV中国设计秀
         ///   <remarks> 类型不符合的话将抛出异常 </remarks> InV中国设计秀
         ///   <param name="elem"> 给定对比的对象 </param> InV中国设计秀
         private   void  ConfirmType( object  elem)InV中国设计秀
        { InV中国设计秀
             if  (_elemType  !=  elem.GetType())InV中国设计秀
            {InV中国设计秀
                 string  msg  =   " Element's type not match with the root's:  " InV中国设计秀
                     +  _elemType.ToString();InV中国设计秀
                 throw   new  ArgumentException(msg);InV中国设计秀
            }InV中国设计秀
        }InV中国设计秀
InV中国设计秀
         ///   <summary> 查看给定对象类型是否可以进行比较运算 </summary> InV中国设计秀
         ///   <remarks> 如果类型不可进行比较运算的话将抛出异常 </remarks> InV中国设计秀
         ///   <param name="elem"> 给定对象 </param> InV中国设计秀
         ///   <returns> InV中国设计秀
         ///   <para> IComparable: IComparable接口 </para> InV中国设计秀
         ///   </returns> InV中国设计秀
         private  IComparable ConfirmComparable( object  elem)InV中国设计秀
        {InV中国设计秀
            IComparable ic  =  elem  as  IComparable;InV中国设计秀
             if  ( null   ==  ic)InV中国设计秀
            {InV中国设计秀
                 string  msg  =   " Element type must support IComparable --  " InV中国设计秀
                        +  elem.GetType().NameInV中国设计秀
                        +   "  does not currently do so! " ;InV中国设计秀
                 throw   new  ArgumentException(msg);InV中国设计秀
            }InV中国设计秀
             return  ic;InV中国设计秀
        }InV中国设计秀
    }InV中国设计秀
}InV中国设计秀
InV中国设计秀
using  System;InV中国设计秀
InV中国设计秀
namespace  SEI.DL88250.SourceCodes.BinaryTreeInV中国设计秀
{InV中国设计秀
     ///   <summary> 用于测试二叉树类 </summary> InV中国设计秀
     class  TestBinTreeInV中国设计秀
    {InV中国设计秀
         public   static   void  Main( string [] arga)InV中国设计秀
        {InV中国设计秀
            BinaryTree bt  =   new  BinaryTree();InV中国设计秀
InV中国设计秀
            bt.Insert( " d " );InV中国设计秀
            bt.Insert( " ab " );InV中国设计秀
            bt.Insert( " a " );InV中国设计秀
            bt.Insert( " e " );InV中国设计秀
            TreeNode tn  =  bt.Find( " ab " );InV中国设计秀
            Console.Write(tn.Value);InV中国设计秀
            bt.Remove( " ab " );InV中国设计秀
            TreeNode tnn  =  bt.Find( " ab " );InV中国设计秀
            Console.Write(tnn.Value);InV中国设计秀
        }InV中国设计秀
    }InV中国设计秀
}InV中国设计秀

本文引用地址:/bc/article_46209.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明