会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
Grisson's .net
源码之前,了无秘密
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
公告
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,就可以实现任何类型的。
posted on
2005-08-30 18:42
海盗
阅读(
445
) 评论(
1
)
收藏
举报
刷新页面
返回顶部
博客园
© 2004-2025
浙公网安备 33010602011771号
浙ICP备2021040463号-3