#include <stdio.h>
#include <stdlib.h>
typedef int Status;
typedef char TElemType;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct BiTNode
{//树二叉链表的存储结构
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct
{//栈的存储结构
BiTree *base;
BiTree *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//初始化栈
s.base=(BiTree *)malloc(STACK_INIT_SIZE * sizeof(BiTree));
if(!s.base) exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackElemty(SqStack &s)
{//判断栈是否为空
if(s.base!=s.top)
return ERROR;
return OK;
}
Status Push(SqStack &s,BiTree e)
{//将元素e进栈
if(s.top-s.base>=s.stacksize)
{ //追加分配
s.base=(BiTree *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(BiTree));
if(!s.base) exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return OK;
}
Status Pop(SqStack &s,BiTree &e)
{//出栈,栈顶元素返回给e
if(s.top==s.base) return ERROR;
e=*--s.top;
return OK;
}
Status CreateBiTree(BiTree &t)
{//用先序建立一个二叉树,空格表示空树
TElemType ch;
scanf("%c",&ch);
if(ch==' ') t=NULL;
else
{
if(!(t=(BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
t->data=ch; //生成根结点
CreateBiTree(t->lchild); //构造左子树
CreateBiTree(t->rchild); //构造右子树
}
return OK;
}
Status Visit(TElemType e)
{//访问函数
printf("%c",e);
return OK;
}
Status InOrderTraverse(BiTree t,Status(* Visit)(TElemType e))
{//用非递归方式实现中序遍历,对每个元素调用函数visit
SqStack s;
InitStack(s); //建立一个栈存储二叉树的结点
BiTree p=t;
while(p||!StackElemty(s))
{
if(p)
{//根指针进栈,遍历左子树
Push(s,p);
p=p->lchild;
}
else
{//根指针退栈,访问根结点,遍历右子树
Pop(s,p);
if(!Visit(p->data)) return ERROR;
p=p->rchild;
}
}
printf("\n");
return OK;
}
Status PostorderTraverse(BiTree t)
{//用递归方式实现后序遍历
if(t)
{
PostorderTraverse(t->lchild); //遍历左子树
PostorderTraverse(t->rchild); //遍历右子树
printf("%c",t->data); //访问结点
}
return OK;
}
int height(BiTNode* node)
{
if (node==NULL)
return 0;
else
{
// 计算左子树的高度和右子树的高度
int lHeight = height(node->lchild);
int rHeight = height(node->rchild);
// 返回二者较大者加1
if (lHeight > rHeight)
return(lHeight+1);
else return(rHeight+1);
}
}
int main()
{
BiTree t;
CreateBiTree(t);
PostorderTraverse(t);
printf("\n");
printf("%d",height(t));
return 0;
}
运行代码,报错内容是什么啊