二叉树实验中提示有两个错误但不知道在哪错了
#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;
}
无法运行提示有两个错误
不太明白是那种问题
求帮忙解答