二叉树插入删除遍历.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
#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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。