为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

二叉树插入删除遍历.txt

2017-11-12 6页 doc 17KB 9阅读

用户头像

is_314871

暂无简介

举报
二叉树插入删除遍历.txt二叉树插入删除遍历.txt #include #include typedef struct BSTNode//结构体(包括节点信息 左右儿子) { int key; struct BSTNode *lchild,*rchild; }BSTNode,*BSTree; int InsertBST(BSTree &t,int k) {//若二叉排序树t中没有关键字k,则插入,否则直接返回 BSTree p,f; p=t; //p的初值指向根结点 while(p) //查找插入位置 { if (p->key...
二叉树插入删除遍历.txt
二叉树插入删除遍历.txt #include #include typedef struct BSTNode//结构体(包括节点信息 左右儿子) { int key; struct BSTNode *lchild,*rchild; }BSTNode,*BSTree; int InsertBST(BSTree &t,int k) {//若二叉排序树t中没有关键字k,则插入,否则直接返回 BSTree p,f; p=t; //p的初值指向根结点 while(p) //查找插入位置 { if (p->key==k){ printf("树中已有该数\n"); return 0;} //已有k,无需插入 f=p; //f保存当前查找的结点 p=(kkey)?p->lchild:p->rchild; //若kkey,在左子树上查找,否则 在右子树上查找 } p=(BSTree)malloc(sizeof(BSTNode)); p->key=k; p->lchild=p->rchild=NULL; if(t==NULL) t=p; //如果是空树,则把输入的数给树根 else if (kkey) f->lchild=p; else f->rchild=p; return 1; }//InsertBST int Delete(BSTree bst, int X) //在二叉排序树bst上,删除其关键字为X的结点。 { BSTree f,p=bst; while (p && p->key!=X) //查找值为X的结点 if (p->key>X) {f=p; p=p->lchild;} else {f=p; p=p->rchild;} if (p==NULL) { printf("无关键字为%d的结点\n",X); return 0; } if (p->lchild==NULL){ //被删结点无左子树 if (f->lchild==p) f->lchild=p->rchild;//将被删结点的右子树接到其双亲上 else f->rchild=p->rchild; } else //被删结点有左子树 { BSTree q,s; q=p; s=p->lchild; //s指向被删结点左子树的根 while (s->rchild !=NULL) //查左子树中最右下的结点(中序最后结点) { q=s; s=s->rchild; } p->key=s->key; //结点值用其左子树最右下的结点的值代替 if (q==p) p->lchild=s->lchild;//被删结点左子树的根结点无右子女 else q->rchild=s->lchild; //s是被删结点左子树中序最后一个结点 free(s); return 1; } }//算法结束 void xianxu(BSTree T){ if(T){ printf("%d ",T->key); xianxu(T->lchild); xianxu(T->rchild); } }//先序 void zhongxu(BSTree T){ if(T){ zhongxu(T->lchild); printf("%d ",T->key); zhongxu(T->rchild); } }//中序 void houxu(BSTree T){ if(T){ houxu(T->lchild); houxu(T->rchild); printf("%d ",T->key); } }//后序 void main() { int id,k; BSTree t=NULL; while(1){ printf("请输入所需的功能选项\n1.插入\n2.删除\n3.先序遍历\n4.中序遍历 \n5.后序遍历\n6.退出\n"); scanf("%d",&id); switch(id) { case 1:{ printf("请输入要插入的数:\n"); scanf("%d",&k); InsertBST(t,k); break; } case 2:{ printf("请输入需要删除的数:\n"); scanf("%d",&k); Delete(t,k); break; } case 3:{ xianxu(t); break; } case 4:{ zhongxu(t); break; } case 5:{ houxu(t); break; } case 6: exit(0); break; default: printf("输入错误~"); break; } } }
/
本文档为【二叉树插入删除遍历.txt】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索