1、3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”。(一)问题分析和任务定义 对问题的描述应避开具体的算法和涉及的数据结构,它是对要完成的任务作出明确的回答,强调的是做什么,而不是怎么做。(二)详细的设计和编码 算法的具体描述和代码的书写。(三)上机调试 源程序的输入和代码的调试。要求:设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,深刻理解、牢固的掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。四、源代码1、用二叉链表存储结构实现#include
2、using namespace std;typedef int KeyType;typedef struct Node KeyType key ; struct Node *lchild,*rchild;BSTNode, *BSTree;void InsertBST(BSTree *bst, KeyType key) BSTree s; if (*bst = NULL)/*递归结束条件*/ s=new BSTNode; s- key=key;lchild=NULL;rchild=NULL; *bst=s; else if (key key) InsertBST(&(*bst)-lchild),
3、 key);/*将s插入左子树*/ else if (key InsertBST(&rchild), key); /*将s插入右子树*/void CreateBST(BSTree *bst) KeyType key; *bst=NULL; scanf(%d, &key); while (key!=0) InsertBST(bst, key); scanf(void InOrder(BSTree root) if (root!=NULL) InOrder(root-lchild); printf(%d ,root-rchild);BSTNode * DelBST(BSTree T, KeyTyp
4、e x) BSTNode *p, *f,*s ,*q; p=T; f=NULL; while(p) /*查找关键字为x的待删结点p*/ if(p-key=x) break; f=p; /*f指向p结点的双亲结点*/keyx) p=p-lchild;rchild; if(p=NULL)return T; /*若找不到,返回原来的二叉排序树*/ if(p-lchild=NULL) /*p无左子树*/ if(f=NULL) T=p- if(f-lchild=p) f-lchild=p-rchild ; else rchild=p- delete p; else /*p有左子树*/ q=p; s=p-
5、 while(s-rchild) /*在p的左子树中查找最右下结点*/ q=s; s=s- if(q=p) q-lchild=s-lchild ; /*将s的左子树链到q上*/rchild=s- p-key=s-key; delete s; return T; void main() BSTree T; int x; BSTree result; printf(建立二叉排序树,请输入序列L:n); CreateBST(&T);中序遍历输出序列为: InOrder(T); cinx; result = DelBST(T,x); if (result != NULL) InOrder(result
6、); else无xn2、用顺序存储结构实现#include struct Node *next;BSTNode,*BSTree;int A40=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1;int j,i=0;void InsertBST(int A,KeyType key) int j=0; while(Aj!=-1) if(keyAj) j=2*j+1; j=2*j+2; Aj=key;void C
7、reateBST(int A) int key;while (key!=-1) InsertBST(A,key);void Traverse(int A,int i) if(Ai!=-1) Traverse(A,2*i+1); coutAit; Traverse(A,2*i+2);void DelBST(int A,KeyType x) for(i=0;i40;i+) if(Ai=x) Ai=-1; /int key; CreateBST(A); Traverse(A,0); DelBST(A,x);删除x后中序遍历输出序列为:无Xn五、测试分析程序运行:1、用二叉链表存储结构实现:2、用顺序
8、存储结构实现:六、总结与体会通过一周的课程设计,对计算机的应用,数据结构的作用以及C+的使用都有了更深的了解。在理论学习和上机实践的各个环节中,通过自主学习和请教老师,我收获了不少。当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获。从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不知如何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高。在这段时间里,我遇到过的问题主要就是C语言和C+语言有些混淆,一些用法记不太清楚。在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。在程序的调试能力上,无形中得到了许多的提高。例如:头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等。在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。