《大话数据结构》C++实现二叉排序树的查找、插入和删除操作

更新时间:2023-04-22 17:53:21 阅读: 评论:0


2023年4月22日发(作者:cad连续标注快捷键)

《⼤话数据结构》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 (keydata)

{

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 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图