云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构实验-二叉排序树应用实验报告

数据结构实验-二叉排序树应用实验报告

  • 62 次阅读
  • 3 次下载
  • 2025/7/14 14:03:28

七、附录

源代码:

#include #include #include #define ElemType char

typedef struct BiTNode { ElemType data[30]; //定义数据域类型为字符数组

struct BiTNode *lchild, *rchild; //定义左右孩子节点指针 }BiTNode, *BiTree;

int SearchBST(BiTree T, char *key, BiTree f, BiTree *p) {

if (!T) // 树为空,查找不成功 {

*p = f; return 0; }

else if(strcmp(key,T->data)==0) // 查找成功 {

*p = T; //p指向查找到的节点 return 1; }

else if (strcmp(key,T->data)<0)

return SearchBST(T->lchild, key, T, p); // 在左子树中继续查找 else

return SearchBST(T->rchild, key, T, p); // 在右子树中继续查找

}

int InsertBST(BiTree *T, char *key) {

BiTree p,s;

if (!SearchBST(*T, key, NULL, &p)) // 查找不成功 {

s = (BiTNode*)malloc(sizeof(BiTNode));//s作为插入节点 strcpy(s->data, key);

s->lchild = s->rchild = NULL; if (!p)

*T = s; // 插入s为新的根结点 else if (strcmp(key,p->data)<0)

p->lchild = s; // 插入s为左孩子 else

p->rchild = s; // 插入s为右孩子 return 1; } else

return 0; // 树中已有关键字相同的结点,不再插入 }

int Search(BiTNode *N,char *key)

{ // 查找树中是否存在要插入的节点 BiTNode *M; M=N;

while(M!=NULL&&strcmp(M->data,key)!=0)

{ // 查找终止条件为树为空或者查找的节点数据与待查找的数据相同 if(strcmp(M->data,key)<0)

M=M->rchild; // 继续查找左子树 else

M=M->lchild; // 继续查找右子树 } if(!M)

printf(\查找失败!\\n\ else

printf(\查找成功!\\n\}

/* 从二叉排序树中删除结点p,并重接它的左或右子树。 */ int Delete(BiTree *p) {

BiTree q,s;

if((*p)->rchild==NULL) // 右子树空则只需重接它的左子树(待删结点是叶子也走此分支) {

q=*p; *p=(*p)->lchild; free(q); // 释放该节点 }

else if((*p)->lchild==NULL) // 只需重接它的右子树 {

q=*p;

*p=(*p)->rchild; free(q); // 释放该节点 }

else // 左右子树均不空 {

q=*p;

s=(*p)->lchild;

while(s->rchild) // 转左,然后向右到尽头(找待删结点的前驱) {

q=s;

s=s->rchild; }

strcpy((*p)->data,s->data); // s指向被删结点的直接前驱(将被删结点前驱的值取代被删结点的值) if(q!=*p)

q->rchild=s->lchild; // 重接q的右子树 else

q->lchild=s->lchild; //重接q的左子树 free(s); }

return 1; }

int DeleteBST(BiTree *T,char *key) {

if(!*T) //不存在关键字等于key的数据元素 return 0; else {

if (strcmp(key,(*T)->data)==0) //找到关键字等于key的数据元素 return Delete(T); //调用Delete函数删除该节点 else if (strcmp(key,(*T)->data)<0)

return DeleteBST(&(*T)->lchild,key);// 继续访问左子树 else

return DeleteBST(&(*T)->rchild,key);//继续访问右子树

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

七、附录 源代码: #include #include #include #define ElemType char typedef struct BiTNode { ElemType data[30]; //定义数据域类型为字符数组 struct BiTNode *lchild, *rchild; //定义左右孩子节点指针 }BiTNode, *BiTree; int SearchBST(BiTree T, char *key, BiTree f, BiTree *p) { if (!T) // 树为空,查找不成功 {

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com