帮忙看看哪里不对
这是我写的btree.cpp
#include
#include
using namespace std;
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *lchild;
struct node *rchild;
}BTNode;
void CreateBtree(BTNode *&b,char *str)//创建二叉树
{
BTNode *St[MaxSize],*p;//St数组作为顺序栈
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='\0')
{
switch(ch)
{
case'(': top++;St[top]=p;k=1;break;
case')':top--;break;
case',':k=2;break;
default:
{
if(ch=='#')break;
p=(BTNode*)malloc(sizeof(BTNode));
p->data=ch;
p->lchild=NULL;
p->rchild=NULL;
if(b=NULL)
b=p;
else
{
switch(k)
{
case 1: St[top]->lchild=p;
case 2: St[top]->rchild=p;
}
}
}
}j++;
ch=str[j];
}
}
void DestoryBTree(BTNode *&b)//销毁二叉树
{
if(b!=NULL)
{
DestoryBTree(b->lchild);
DestoryBTree(b->rchild);
free(b);
}
}
BTNode *FindNode(BTNode *b,ElemType x)//查找结点
{
BTNode *p;
if(b==NULL)
return NULL;
else if(b->data==x)
return b;
else
{
p=FindNode(b->lchild,x);
if(p!=NULL)
return p;
else
return FindNode(b->rchild,x);
}
}
BTNode *LchildNode(BTNode*p)//找孩子结点
{
return p->lchild;
}
BTNode *RchildNode(BTNode*p)
{
return p->rchild;
}
int BTHeight(BTNode *b)//求高度
{
int lchildh,rchildh;
if(b==NULL) return 0;
else
{
lchildh=BTHeight(b->lchild);
rchildh=BTHeight(b->rchild);
return(lchildh>rchildh)? (lchildh+1):(rchildh+1);
}
}
void PreOrder(BTNode *b)//先序遍历
{
if(b!=NULL);
{
printf("%c",b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
void InOrder(BTNode *b)//中序遍历
{
if(b!=NULL);
{
InOrder(b->lchild);
printf("%c",b->data);
InOrder(b->rchild);
}
}
void PostOrder(BTNode *b)//后序遍历
{
if(b!=NULL);
{
PostOrder(b->lchild);
PostOrder(b->rchild);
printf("%c",b->data);
}
}
void DispBTree(BTNode *b)//输出二叉树
{
if(b!=NULL)
{
printf("%c",b->data);
if(b->lchild!=NULL||b->rchild!=NULL)
{
printf("(");
DispBTree(b->lchild);
if(b->rchild!=NULL) printf(",");
DispBTree(b->rchild);
printf("(");
}
}
}
这是我写的exep4-1.cpp
#include
#include"btree.cpp"
#include
char str[MaxSize];
BTNode *lk;
void a(BTNode *&lk)
{
printf("先序创建二叉树:");
scanf("%s",&str);
CreateBtree(lk,str);
}
void b(BTNode *lk)
{
printf("先序遍历输出:");
PreOrder(lk);
printf("\n");
printf("中序遍历输出:");
InOrder(lk);
printf("\n");
printf("后序遍历输出:");
PostOrder(lk);
printf("\n");
}
void c(BTNode *lk)
{
int h=BTHeight(lk);
printf("%d\n",&h);
}
int main()
{
int x;
printf("1.先序次序建立二叉树.2.分别用先中后递归遍历的方法遍历输出二叉树.3.求二叉树的深度.4.退出\n");
while(true)
{
printf("请选择要进行的操作:");
scanf("%d",&x);
switch(x)
{
case 1:
{
a(lk);
break;
}
case 2:
{
b(lk);
break;
}
case 3:
{
c(lk);
break;
}
case 4:
{
exit(0);
}
}
}
}