Grisson's .net

源码之前,了无秘密

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
删除过程:

         
public void DelNode(int x)//删除结点值为x的结点

         
{

              TreeNode p,q,r,t;

              p 
= root;

              q 
= null;//p指向待比较的结点,q为p的前驱结点

              
while(p!=null && p.Data!=x)

              
{

                  
if(x<p.Data)

                  
{

                       q 
= p;

                       p 
= p.LeftNode;

                  }


                  
else

                  
{

                       q 
= p;

                       p 
= p.RightNode;

                  }


              }


              
if(p == null)

                  Console.Write(
"error");

              
else if(p.LeftNode == null)//被删结点无左支树

              
{

                  
if(q == null)

                       t 
= p.RightNode;

                  
else if(q.LeftNode == p)

                       q.LeftNode 
= p.LeftNode;

                  
else

                       q.RightNode 
= p.RightNode;

              }


              
else

              
{

                  
//查找被删结点的左支树中最右结点,即刚好小于x的结点

                  r 
= p.LeftNode;

                  
while(r.RightNode != null)

                       r 
= r.RightNode;

                  r.RightNode 
= p.RightNode;

                  
if(q == null)

                       t 
= p.RightNode;

                  
else if(q.LeftNode == p)

                       q.LeftNode 
= p.LeftNode;

                  
else

                       q.RightNode 
= p.RightNode;

              }


         }

本实例中数据类型采用的是int,可以改成接口IComparable,就可以实现任何类型的。

posted on 2005-08-30 18:42  海盗  阅读(443)  评论(1编辑  收藏  举报