二叉排序树删除结点的方法
//数据结构与算法分析
void remove(const Type& x,BinaryNode*& p)
{
if(t == NULL)
return;
if(x < t->element)
remove(x,t->left);
else if(x > t->element)
remove(x,t->right);
else if(t->left != NULL && t->right !=NULL)
{
t->element=findMin(t->right)->element;
remove(t->element,t->right);
}
else
{
BinaryNode* oldNode = t;
t=(t->left != NULL) ? t->left : t->right;
delete oldNode;
}
}
BinaryNode* findMin(BinaryNode* t)
{
if(t!=NULL)
while(t->left!=NULL)
t=t->left;
return t;
}
//以下是课本上的
void remove(BinaryNode* t)
{
if(!p->rchild)
{
q=p;
p=p->lchird;
free(q);
}
else if(!p->lchild))
{
q=p;
p=p->right;
free(q);
}
else //左右子树均不空
{
q=p;
s=p->lchild;
while(s->right) //转左,然后向右到尽头
{
q=s;
s=s->rchild; //s指向被删除结点的前驱;
}
p->element=s->element;
if(q!=p) //重接*q右子树
q->rchild=s->lchild;
else //重接*q左子树
q->lchild=s->lchild;
delete s;
}
}
如下二叉排序树所示
6
2 8
1 5
3
4
如果要删除结点2的话 两种算法得到的结果不一样
第一种:
6
3 8
1 5
4
课本上的做了之后这样:
6
1 8
5
3
4
大家看看有什么问题
...全文
相关推荐
二叉排序树的基本操作-创建,查找,删除,插入(C++)
本文介绍了基于顺序存储的二叉排序树实现,包含创建树、插入节点、中序遍历、查找节点、删除节点等功能。代码使用模板类seqlist进行封装,并提供计算树高、结点个数及平均查找长度的方法。
数据结构 设计论文 二叉排序树的实现
**查找节点**:在二叉排序树中查找特定关键字的节点,我们采用递归的方法,从根节点开始,根据关键字与当前节点关键字的比较结果,决定向左子树还是右子树继续查找。
数据结构二叉排序树的实现(用顺序和二叉链表作存储结构)课程设计.pdf
在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。在查找和删除元素时,需要使用查找函数和删除函数。查找函数采用递归的方式进行查找。
图形化显示二叉排序树
这种特性使得二叉排序树在查找、插入和删除操作上具有较高的效率。
c++数据结构--二叉排序树
这种结构使得在树中查找一个元素变得非常高效,同时也支持插入和删除操作。本文将详细介绍如何在VS2010环境下使用C++实现二叉排序树,并提供非递归和递归两种方法来创建树,以及如何进行遍历和查找等操作。


