二叉查找树的插入,删除,遍历和查找等C++实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这里给出了二叉搜索树的创建,以及进行中序遍历、元素插入、删除、查找最大最小值的基本代码:
#include
using namespace std;
template
class BSTNode
{
public:
BSTNode(){lChild = rChild = NULL;}
BSTNode(T &x){element = x; lChild = rChild = NULL;}
//private:
int element;
BSTNode
};
template
BSTNode
{
BSTNode
if(!t)
return b;
else if(b->element <= t->element)
{
t->lChild = CreateBST(t->lChild, b->element);
}
else
{
t->rChild = CreateBST(t->rChild, b->element);
}
return t;
}
template
void InOrder(BSTNode
{
if(t)
{
InOrder(t->lChild);
cout<< t->element << " ";
InOrder(t->rChild);
}
}
template
BSTNode
{
BSTNode
BSTNode
while(t)
{
temp = t;
if(b->element <= t->element)
{
t = t->lChild;
}
else
{
t = t->rChild;
}
}
if(!temp)
return b;
else
{
if(b->element <= temp->element)
{temp->lChild = b;
}
else
{
temp->rChild = b;
}
}
return root;
}
template
BSTNode
while(t && t->element!=key)
{
if(key <= t->element)
{
t = t->lChild;
}
else
{
t = t->rChild;
}
}
return t;
}
template
BSTNode
{
while(t->lChild)
{
t= t->lChild;
}
return t;
}
template
BSTNode
{
while(t->rChild)
{
t = t->rChild;
}
return t;
}
template
BSTNode
BSTNode
if(t == node)
{
return NULL;
}
else
{
while(t)
{
if(!t->lChild&& !t->rChild)
{
return NULL;
}
else if(t->lChild == node || t->rChild == node)
{
parent = t;
break;
}
else if(node->element <= t->element)
{
t = t->lChild;
}
else
{
t= t->rChild;
}
}
}
return parent;
}
template
BSTNode
BSTNode
BSTNode
if(z->lChild == NULL || z->rChild == NULL)
{
y = z;
}
else
{
y = Minimum(z->rChild);
}
if(y->lChild)
{
x = y->lChild;
}
else
{
x = y->rChild;
}
if(x)
{
BSTNode
if(!parent)
{
return x;
}
else if(parent->lChild == y)
{
parent->lChild = x;
}
else if(parent->rChild == y)
{
parent->rChild =x;
}
}
if(y != z)