求高手帮我做份数据结构课程设计的详细答案{二叉排序树操作},我们要交作业,做的好,我把分都给你!!

题目如下
二叉排序树操作
试编写二叉树这种数据结构的常用操作(结点插入,查找,构造、删除)
测试数据:自行设计,树的深度不小于4
一定别瞎COPY,我要交作业的!

#include "stdio.h"
#include"stdlib.h"
#include<string.h>
typedef struct BTREE {
char data;
struct BTREE *left;
struct BTREE *right;
} BTNode,*BTree;

BTree node;

void createBST(BTree *T, char ord);
BTree createBT()
{
BTree *T,t;
int tong,i;
t=(BTree)malloc(sizeof(BTNode));
T=&t;
(*T)->left=NULL;
(*T)->right=NULL;
char *s;
s=(char * )malloc(100*sizeof(char));
scanf("%s",s);
(*T)->data=*s;
tong=strlen(s);
for(i=1;i<tong;i++)
{
s=(s+1);
createBST(T,*s);
}
return t;
}
void createBST(BTree *T, char ord)
{
BTree *S;
S=(BTree *)malloc(sizeof(BTree));
if(ord<((*T)->data))
{
if((*T)->left==NULL)
{
(*T)->left=(BTree)malloc(sizeof(BTNode));
(*T)->left->data=ord;
(*T)->left->left=NULL;
(*T)->left->right=NULL;
}
else
{
*S=(*T)->left;
createBST(S,ord);
}
}
else if(ord>((*T)->data))
{
if((*T)->right==NULL)
{
(*T)->right=(BTree)malloc(sizeof(BTNode));
(*T)->right->data=ord;
(*T)->right->left=NULL;
(*T)->right->right=NULL;
}
else
{
*S=(*T)->right;
createBST(S,ord);
}
}
}

BTree searchBST(BTree T, char key)
{
if(T==NULL) return NULL;
else if(key==T->data) return T;
else if(key<T->data) return searchBST(T->left,key);
else return searchBST(T->right,key);
}
int insertBST(BTree *T, char e)
{
BTree p=new BTNode;

if(e==(*T)->data) return -1;
else if(e<(*T)->data)
{
if(!(*T)->left)
{
p->data=e;
p->left=NULL;
p->right=NULL;
(*T)->left=p;
}
else
insertBST(&((*T)->left),e);
}
else
{
if(!(*T)->right)
{
p->data=e;
p->left=NULL;
p->right=NULL;
(*T)->right=p;
}
else
insertBST(&((*T)->right),e);
}

return 0;
}

int deleteBST(BTree *T,char key)
{

if(!(*T))
{
return -1;
}
else if((*T)->data>key)
{
node=*T;
return deleteBST(&((*T)->left),key);
}
else if((*T)->data==key)
{

if(!((*T)->left))//单支
{
if((node)->left==(*T))
{
(node)->left=(*T)->right;
return 0;
}
else
{
(node)->right=(*T)->right;
return 0;
}
}
else if(!((*T)->right))//单支
{
if((node)->left==(*T))
{
(node)->left=(*T)->left;
return 0;
}
else
{
(node)->right=(*T)->left;
return 0;
}
}
else//有左右孩子的节点,不是单支
{
BTree p,ls=(*T)->left;
p=*T;
while(ls->right)
{
p=ls;
ls=ls->right;
}
(*T)->data=ls->data;
if(p!=(*T))
{
p->right=ls->left;
}
else
{
p->left=ls->left;
}
return 0;
}
}
else
{
node=*T;
return deleteBST(&(*T)->right,key);
}
}
void InOrder( BTree T)
{
if(T)
{
InOrder(T->left);
printf("%c",T->data);
InOrder(T->right);
}
}
int main()
{
BTree *R , root;

char key;
int i,k;

while(1)
{
int state=0;
scanf("%d",&k);
while(k<0 || k>6) scanf("%d",&k);

switch(k)
{
case 0:
root=createBT();
R=&root;
break;
case 1:
getchar();
scanf("%c",&key);
BTree p;
p=searchBST( *R , key );
if(p==NULL)
printf("未找到\n");
else
printf("找到了 %c\n",p->data);
break;
case 2:
getchar();
scanf("%c",&key);
int insert;
insert=insertBST( R , key );
if(insert==-1)
printf("已存在,插入失败。\n");
else
printf("插入成功。\n");
break;
case 3:
getchar();
scanf("%c",&key);
int dele;
dele=deleteBST( R , key );
if(dele==-1)
printf("不存在,删除失败。\n");
else
printf("删除成功。\n");
break;
case 4:
InOrder( *R );
printf("\n");
break;
case 5:
state=1;
break;
}
if(state==1) break;
}

return 0;
}

输入0建立(输入一个字符串回车结束)
输入1查找
输入2插入
输入3删除
输入4遍历输出二叉树
输入5退出

你可以自己在测试一下,可以过的。然后题目什么要求你自己修改就可以了追问

谢谢你的详细回答,真的很麻烦你,但是老师要让我们交 课程设计报告和相应的电子文档 ,你能不能帮我做个完整的WORD发到我邮箱里,649321243@qq.com,万分感谢

温馨提示:内容为网友见解,仅供参考
无其他回答

数据结构第八章作业,求高手给个答案。感激不尽。
普通作业八(第九章)专科 9.1 9.2 9.3 27 mod 8 = 3, 17 mod 8 = 1, 9 mod 8 = 1, 19 mod 8 = 3, 16 mod 8 = 0, 43 mod 8 = 3, 53 mod 8 = 5, 8 mod 8 = 0, 63 mod 8 = 7,于是链地址法解决冲突的哈希表为:...

西交21春《数据结构》在线作业【标准答案】
8. 设用链表作为栈的存储结构则退栈操作(B)必须判别栈是否为空 9. 下列各种排序算法中平均时间复杂度为O(n)是(D)。10. 深度为h的满二叉树,第i层有( A )个结点。11. 设某哈夫曼树中有199个结点,则该哈夫曼树中有(B)个叶子结点。12. 设一棵完全二叉树中有65个结点,则该完全二...

求下面数据结构试题的答案...
1,复杂性 2.线性结构 非线性结构 3.可以按序号随机存取 4.数据元素 5.后进先出 6.n 7.只能在队头进行 9.长度 1 深度 1 10 -+A*BC\/DE 11 12 顶点Vp到顶点Vq之间的路径是指定的序列Vp,Vi1,Vi2•••Vim,Vq。13 n(n-2)\/2 14 n—1 ...

求数据结构(用面向对象方法与C++语言描述)第二版 殷人昆主编 课后答案...
6、(1)前序和后序相同:只有一个结点的二叉树 (2)中序和后序相同:只有左子树的二叉树 (3)前序和中序相同:只有右子树的二叉树7、证明:∵n个结点的K叉树共有nk个链域,分支数为n-1(即非空域)。 ∴空域=nk-(n-1)=nk-n+18、对应的树如下: 9、(答案不唯一)哈夫曼树如下图所示: 哈夫曼编码如下:...

寻一份《数据结构》试题及答案
D、21604. 如果以链表作为栈的存储结构,则退栈操作时( )A、 必须判别栈是否满 B、 对栈不作任何判别C、 必须判别栈是否空 D、 判别栈元素的类型5. 设数组Data[0..m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作的语句为(...

关于数据结构的问题,用C语言描述
比如:求表深度,复制广义表等。这种题目,可以根据不同角度广义表的表现形式运用两种不同的方式解答:一是把一个广义表看作是表头和表尾两部分,分别对表头和表尾进行操作;二是把一个广义表看作是若干个子表,分别对每个子表进行操作。第五章 树与二叉树从对线性结构的研究过度到对树形结构的研究,是数据结构课程学习...

求助:数据结构课程设计。有的发邮箱nail_hua@163.com
2。该算法设计 解决这个问题,我们必须首先建立haffman的树,叶子节点分配。文本解码过程:首先检索的叶子,然后从叶子到根路径的记录数组(左0右一)原则输出数组元素,然后使用“高级”密码翻译过程中存储的字符左0右1做密码对应的叶节点,输出节点。3。数据结构设计 节点设计 结构Htnode { 诠释湿重;诠释...

电脑专业需要学什么计算机专业主要学什么课程
好多课程这三个专业都要学习。1、计算机科学与技术 高级语言程序设计(C、C++等)、汇编语言程序设计、离散数学、数据结构与算法、计算机组成原理、编译原理、操作系统、面向对象程序设计、计算机网络组成原理等。2、网络工程高级语言程序设计、汇编语言程序设计、离散数学、面向对象的系统分析与程序设计、数据结构与算法分析...

计算机专业有哪些课程?
还有局域网组建、Linux服务器操作系统、网络设备与网络技术(主要学习思科、华为公司设备的配置、管理、调试)、SQL Server、网络综合布线技术、CAD绘图等。计算机学科的特色主要体现在:理论性强,实践性强,发展迅速按一级学科培养基础扎实的宽口径人才,体现在重视数学、逻辑、数据结构、算法、电子设计、...

学计算机需要学什么
1.4 数学基础知识 ・ 命题逻辑、谓词逻辑、 形式逻辑 的基础知识 ・ 常用数值计算 ・ 排列组合 、 概率论 应用、 应用统计 ・ 运算基本方法 1.5 常用 数据结构 ・ 数组、 线性表 、 链表 、 队列、栈、树、图等的定义、存 储和操作 ・ Hash 1.6 常用算法 ・ 排序算法 、查找算法、 数值计算...

相似回答