《⼤话数据结构》C++实现⼆叉排序树的查找、插⼊和删除操
作
#include
using namespace std;
typedef int status;
//定义⼀个树的结构体
typedef struct BiTNode
{
int data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
//函数声明
void CreateBST(BiTree* T, int a[], int n);
void outputBST(BiTree T);
status InrtBST(BiTree* T, int key);
status DeleteBST(BiTree*T,int key);
status Delete(BiTree *p);
//⼆叉排序树的查找函数定义
status SearchBST(BiTree T,int key,BiTree f,BiTree *p)
{
if (!T)
{
*p = f;
return fal;
}
el if (key==T->data)
{
*p = T;
return true;
}
el if (key
{
return SearchBST(T->lchild,key,T,p);
}
el
{
return SearchBST(T->rchild,key,T,p);
}
}
//⼆叉排序树的插⼊函数定义
status InrtBST(BiTree *T,int key)
{
BiTree p=NULL, s=NULL;
if (!SearchBST(*T,key,NULL,&p))
{
s = (BiTree)malloc(si风级顺口溜 zeof(BiTNode));
s->data = key;
s->lch清莱白庙 ild = s->rchild = NULL;
if (!p)
* T = s;
el if (key < p->data)
p->lchild = s;
el
p->rchild = s;
return true;
}
}
return fal;
}
//⼆叉排序树的删除操作函数定义
status D眉毛痣 eleteBST(BiTree* T, int key)
{
if (!*T)
return fal;
el
{
if (key == (*T)->data)
{
return Delete(T);
}
el if (key<(*T)->data)
{
return DeleteBST(&(*T)->lchild,key);
}
el
{
return DeleteBST(&(*T)->rchild,key);
}
}
}
//根据节点吉他多久能学会 的三种情况来删除节点
status Delete(BiTr元旦节快乐 ee* p)
{
BiTree q, s;
if ((*p)->rchild==NULL)
{
q = *p; *p = (*p)->lchild; free(q);
}
el if ((*p)->lchild==NULL)
{
q = *p; *p = (*p)->rchild; free(q);
}
el
{
q = *p; s = (*p)->lchild;
while (s->rchild)
{
q = s班级布置创意设计 ; s = s->rchild;
}
(*p)->data = s->data;
if (q != *p)
q->rchild = s->lchild;
el
q->lchild = s->lchild;
free(s);
}
return true;
}
//通过⼀个数组来创建⼆叉排序树
void CreateBST(BiTree*T, int a[], int n)
{
int i;
for (i = 0; i < n; i++)
{
InrtBST(T, a[i]);
}
}
//把⼀个⼆叉排序树中序遍历打印
//把⼀个⼆叉排序树中序遍历打印
void outputBST(BiTree T)
{
if (T == NULL)
{
return;
}
outputBST(T->科学手抄报简单又漂亮 lchi三黄片的副作用 ld);
cout << T->data << " ";
outputBST(T->rchild);
}
//主函数
int main()
{
int a[] = { 62,88,58,47,35,73,51,99,37,93 };
BiTree T = NULL;
//创建⼆叉排序树
CreateBST(&T, a, 10);
//在⼆叉排序树中插⼊95
InrtBST(&T, 95);
//在⼆叉排序树中查找节点
int b = 95;
BiTree p = NULL;
if (!SearchBST(T, b, NULL, &p))
cout << "没有找到" << endl;
el
{
cout << b << "查找结果的指针为:n" << p << endl;
}
//在⼆叉排序树中删除88节点
DeleteBST(&T, 88);
//验证上述的插⼊和删除操作
outputBST(T);
cout << endl;
return 0;
}
本文发布于:2023-04-22 17:53:21,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/82/509642.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |