m0_65185517 2022-11-17 22:52 采纳率: 66.7%
浏览 21
已结题

二叉排序树,程序报错,错误原因和如何修改


#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef struct BSTNode {
    int data;
    struct BSTNode *lchild;
    struct BSTNode *rchild;
} BSTNode, *BSTree;

//动态查找算法:查找插入位置
Status searchBSTForInsert(BSTree T, int key, BSTree &q) {
    BSTree p, f;
    p = T;
    f = NULL;
    if (p == NULL)
        return FALSE;
    while (p) {
        if (key == p->data) {
            p = q;
            return TRUE;
            }else if (key, p->data) {
                f = p;
                p = p->lchild;
            } 
            else {
                f = p;
                p = p->rchild;
            }
        }
        q = f;
        return FALSE;
    }
//创建二叉树
    void createBSTree(BSTree & T) {
        DataType e;
        BSTNode *q,*p;
        T=NULL;
        scanf("%d",&e);
        while(!e!=0)
        {if(!searchBSTForInsert(T,e.key,q))
            {    p=(BSTree)malloc(sizeof(BSTNode));
            p->data=e;
            p->lchild=p->rchild=NULL;
            if(!p)T=p;
            else if(e.key<q->data.key)q->lchild=p;
            else q->rchild=p;
            }
            inputElem(e);
        }
    }
//中序输出
    void inorderOutput(BSTree T) {
        if (T) {
            inorderOutput(T->lchild);
            int(T->data);
            inorderOutput(T->rchld);
        }
    }
//静态查找
    BSTNode *searchBST(BSTree T, int key) {
    BSTNode *p=T;
    while(p)
    {
        if(key==p->data)return p;
        else if(key<p->data)p=p->lchild;
        else p=->rchild;
    }
    return NULL;
    }
//测试主程序
    int main() {
        BSTree T;
        printf("输入数据序列(以零结束),创建BST:\n");
        createBSTree(T);
        printf("BST的中序序列:\n");
        inorderOutput(T);
        printf("\n");
        int key;
        printf("********BST上查找测试*******\n");
        printf("\n输入关键字查找(0结束查找)");
        scanf("%d", &key);
        while (key != 0) {
            BSTNode *p = searchBST(T, key);
            if (p)
                printf("查找成功,其值为:%d\n", p->data);
            else
                printf("值为%d的结点不存在!\n", key);
            printf("输入关键字值(0结束查找)");
            scanf("%d", &key);
        }
        return 0;
    }
  • 写回答

1条回答 默认 最新

  • mainidea 2022-11-18 11:14
    关注

    感觉很多是输入的错误呢,你用的是VS几?没有词汇联想功能吗?

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

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 11月17日

悬赏问题

  • ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
  • ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)
  • ¥15 yolov9的训练时间
  • ¥15 二叉树遍历没有报错但无法正常运行
  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动