c#数据结构———二叉查找树删除
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,就可以实现任何类型的。