SSS42 2022-04-13 13:36 采纳率: 100%
浏览 29
已结题

求解决一下 这是出了什么问题

#include<stdio.h>
#include<stdlib.h>

typedef struct Tnode{
int data;/输入的数据/
struct Tnode *lchild,*rchild;/结点的左右指针,分别指向结点的左右hai子/
}*node,BSTnode;
searchBST(node t,int key,node f,node *p)/查找函数/
{
if(!t)
{*p=f;return(0);}/查找不成功/
else
if(key==t->data) {*p=t;return(1);}/查找成功/
else
if(keydata) searchBST(t->lchild,key,t,p);/在左子树中继续查找/
else
searchBST(t->rchild,key,t,p);/在右子树中继续查找/
}

insertBST(node t,int key)/插入函数/
{
node p=NULL,s=NULL;
if(!searchBST(t,key,NULL,&p))/查找不成功/
{
s=(node)malloc(sizeof(BSTnode));
s->data=key;
s->lchild=s->rchild=NULL;
if(!p) t=s;/被插结点s为新的根结点/
else
if(keydata) p->lchild=s;/被插结点s为左hai子
/
else p->rchild=s;/被插结点s为右hai子
/
return(1);
}
else
return(0);/树中已有关键字相同的结点,不再插入/
}
inorderTraverse(node *t) /中序遍历函数/
{
if(*t){
if(inorderTraverse(&(*t)->lchild)) /中序遍历根的左子树/
printf("%d",(t)->data); /输出根结点/
if(inorderTraverse(&(t)->rchild));/中序遍历根的右子树/
}
return(1);
}
node Delete(node t,int key) /删除函数/
{
node p=t,q=NULL,s,f;
while(p!=NULL) /查找要删除的点/
{
if(p->data==key)
break;
q=p;
if(p->data>key) p=p->lchild;
else
p=p->rchild;
}
if(p==NULL)
return t; /查找失败/
if(p->lchild==NULL)/p指向当前要删除的结点/
{
if(q==NULL) t=p->rchild; /q指向要删结点的父母/
else
if(q->lchild==p) q->lchild=p->rchild; /p为q的左hai子/
else
q->rchild=p->rchild;/p为q的右hai子/
free(p);
}
else{ /p的左hai子不为空/
f=p;
s=p->lchild;
while(s->rchild) /左拐后向右走到底/
{
f=s;
s=s->rchild;
}
if(f==p) f->lchild=s->lchild; /
重接f的左子樹
/
else f->rchild=s->lchild; /重接f的右子树/
p->data=s->data;
free(s);
}
return t;
}
void main()
{
node T=NULL;
int num;
int s=0,j=0,i=0;
int ch=0;
node p=NULL;
printf("输入一串数,每个数以空格分开:");
do{
scanf("%d",&num);
if(!num)printf("完成输入!\n");
else insertBST(&T,num);
}while(num);
printf("\n 1:中序输出");

    printf("\n 2:输入元素");

    while(ch==ch)
    {
        scanf("%d",&ch);
        switch(ch){
        case 0:
            exit(0);/*0--退出*/
        case 1:
            printf("中序遍历输出结果为:\n ");
            inorderTraverse(&T);/*1--中序遍历*/
            break;
        
        case 2:
            printf("输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历,否则输出无x:");
            scanf("%d",&num); /*3--删除某个结点*/
            if(searchBST(T,num,NULL,&p))
            {
                T=Delete(T,num);
                printf("删除成功!中序遍历输出: \n ");
                inorderTraverse(&T);
            }
            else
                printf(" 无%d",num);
            break;
        default:
            printf("无此结点\n");
            break; /*输入无效字符*/
        }
    }
}

#include
using namespace std;

class node
{
public:
node(int i):data(i),lef(NULL),right(NULL){}
void inorder(node*&root)//中序遍历,符合升序输出
{
if(root!=NULL)
{
inorder(root->left);
cout<data<<' ';
inorder(root->right);
}
}
void insert(node *&ptr,int item)//在查找树中插入元素
{
if(ptr==NULL)
ptr=new node(item);
else if(itemdata)
insert(ptr->left,item);
else insert(ptr->right,item);
}
node *find(node *&ptr,int item) //在查找树中查找元素,找到返回所在结点指针,找不到返回空指针.
{
if(ptr==NULL)
return NULL;
if(ptr->data==item)
return ptr;
else if(itemdata)
find(ptr->left,item);
else find(ptr->right,item);
}
node &findy(node &ptr,int item) //在查找树中查找肯定存在的元素,并返回其引用
{
if(ptr->data==item)
return ptr;
else if(itemdata)
findy(ptr->left,item);
else findy(ptr->right,item);
}
node
rl(){return left;}
node
rr(){return right;}
void dele(node *&ptr)//删除值为item所在结点
{
if(ptr->rl)==NULL&&ptr->rr()==NULL)
ptr=NULL;
else if(ptr->rr()==NULL)
ptr=ptr->rl();
else
ptr=ptr->rr();
}
private:
int data;
node *left;//左hai子结点
node *right;//右hai子结点
};

int main()
{
int t,i=0,j;
cout<<"输入数字个数(结点个数):";
cin>>t;
cout<<"输入"<<t<<"个数字,数字之间用空格隔开:";
cin>>j;
node *x=new node(j);
for(;i<t-1;i++)
{
cin>>j;
x->insert(x,j);
}
cout<<"中序遍历为:";
x->inorder(x);//作中序遍历
cout<<"\n输入操作(当输入-1时程序结束):"<<endl;
cin>>j;
while(j!=-1)
{
node *t=x->find(x,j);//定位结点
if(t!=NULL)
{
node *&y=x->findy(x,j);
x->dele(y);
cout<<"中序遍历为:";
x->inorder(x);
}
else cout<<"无"<<j;
cout<<"\n输入操作(当输入-1时程序结束):"<<endl;
cin>>j;
}
return 0;
}

  • 写回答

1条回答 默认 最新

  • yun6853992 2022-04-13 13:42
    关注

    把结构体struct Tnode 的声明放在最前面试试,
    贴一下代码啊,不确定的回答。。。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 修改了问题 4月13日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败