DPR_L 2022-05-18 18:54 采纳率: 0%
浏览 74

大学生二叉树实验遇到问题

二叉树实验中提示有两个错误但不知道在哪错了
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <malloc.h>
#include<iostream>
using namespace std;
#define OK         1
#define ERROR      0
/*二叉树的链式存储表示*/
typedef int Status;
typedef char TElemType;      /*由用户定义的实际数据类型*/
typedef struct BiTNode
{
    TElemType data;
    struct BiTNode* lchild, * rchild;   /*左右孩子指针*/
} BiTNode, * BiTree;              /*结点类型*/

int a;
int main()
{
    Status  CreateBiTree (BiTree& T);   /*构造二叉链表*/
    Status PrintChar(TElemType e);   /*Visit 函数*/

    Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e)); /*前序遍历二叉树*/
    Status InOrderTraverse(BiTree T, Status(*Visit)(TElemType e)); /*中序遍历二叉树*/
    void Postorder(BiTree T);      /*后序遍历二叉树*/
    int nodes(BiTree T);           /*计算总结点数*/
    int leafs(BiTree T);           /*计算总叶子数*/
    void swap(BiTree T);        /*交换左右子树*/
    BiTree T{};
    int k;
    char ch;
    do {

        printf("\n========实验一:线性表 ===============");
        printf("\n        1.建立线性表");
        printf("\n        2.插入元素");
        printf("\n        3.删除元素");
        printf("\n        4.查找元素");
        printf("\n        0.结束程序运行");
        printf("\n=====================================");
        printf("\n        请输入您的选择(1,2,3,4,0)\n");

        scanf_s("%d", &k);
        switch (k)
        {
        case 1: {

            cout << "请按照先序遍历的顺序输入一个二叉树(空树以#标记):";

            CreateBiTree(T);

            cout << "二叉树创建成功!" << endl;

            break;
        }

        case 2: {

            cout << "先序遍历的结果为:" << endl;

            PreOrderTraverse(T, PrintChar);

            cout << endl;
            break;
        }

        case 3: {

            cout << "中序遍历的结果为:" << endl;

            InOrderTraverse(T, PrintChar);

            cout << endl;


            break;
        }

        case 4: {

            cout << "后序遍历的结果为:" << endl;

            Postorder(T);

            cout << endl;

            break;
        }
        }
    } while (k != 0);
    ch = getchar();
}

/*构造二叉链表*/
Status CreateBiTree(BiTree& T)       /* P131 算法6.4*/
{
    char ch;
    scanf_s("%c", &ch, 20);

    if (ch == ' ') T = NULL;
    else {
        if (!(T = (BiTNode*)malloc(sizeof(BiTNode))))exit(0);
        (T)->data = ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
return 0;
}

Status PrintChar(TElemType e)
{   /*Visit 函数*/
    printf("%c", e);
    return OK;
}
/*前序遍历二叉树*/
Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e))
{  /* P129 算法6.1*/
    if (T) {
        if (Visit(T->data))
            if (PreOrderTraverse(T->lchild, Visit))
                if (PreOrderTraverse(T->rchild, Visit)) return OK;
        return ERROR;
    }
    else return OK;
}
/*中序遍历二叉树的简单写法 */
void Inorder(BiTree T)
{
    if (T) {
        Inorder(T->lchild);
        printf("%c", T->data);
        Inorder(T->rchild);
    }
}

/*后序遍历二叉树*/
void Postorder(BiTree T)
{
    if (T) {
        Postorder(T->lchild);
        Postorder(T->rchild);
        printf("%2c", T->data);

    }
}

/*计算总结点数*/
int nodes(BiTree T)
{
    if (T)
        return(nodes(T->lchild) + nodes(T->rchild) + 1);
    else
        return(0);
}

/*计算总叶子数*/
int leafs(BiTree T)
{
    if (T == NULL)return(0);
    else {
        if (T->lchild == NULL && T->rchild == NULL)return(1);
        else return(leafs(T->lchild) + leafs(T->rchild));
    }

}

/*交换左右子树*/
void swap(BiTree T)
{
    BiTree p;
    if (T) {
        p = T->lchild;
        T->lchild = T->rchild;
        T->rchild = p;
        swap(T->lchild);
        swap(T->rchild);
    }
}

/*计算二叉树的深度或者称为高度*/
int depth(BiTree T) {
    int hl, hr, max;
    if (T) {
        if (T->lchild == NULL && T->rchild == NULL) return 1;
        else {
            hl = depth(T->lchild);
            hr = depth(T->rchild);
            max = (hl > hr) ? hl : hr;
            return   max + 1;
        }
    }
    else return 0;
}
/*结点赋值
     叶结点的值为3
     只有左孩子或右孩子的结点则其值分别等于左孩子或右孩子的值
     左、右孩子均有的结点,则其值等于左、右孩子结点的值之和
*/
int ChangeValue(BiTree T) {
    int hl, hr;
    if (T) {
        if (T->lchild == NULL && T->rchild == NULL)  T->data = 3;
        else {
            hl = depth(T->lchild);
            hr = depth(T->rchild);
            T->data = hl + hr;
        }
        return T->data;
    }
    else return 0;
}

无法运行提示有两个错误

img

不太明白是那种问题
求帮忙解答
  • 写回答

1条回答 默认 最新

  • 张十五 2022-05-19 14:01
    关注

    InOrderTraverse这个函数,只声明了,但没有实现,报错了

    评论

报告相同问题?

问题事件

  • 创建了问题 5月18日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog