今天开博了2007-7-16

开博没有太监的客。。。

 

c#数据结构———二叉查找树删除

删除过程:

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

         {

              TreeNode p,q,r,t;

              p = root;

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

              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-04-26 18:03  胡敏  阅读(827)  评论(0编辑  收藏  举报

导航