这个错误如何改啊
/*-------------------------------------------------------*/
/*程序目的:建立表达式二叉树并计算其结果 */
/*-------------------------------------------------------*/
#include "stdlib.h"
#include "stdio.h"
struct tree //声明树的结构
{
struct tree *left; //存放左子树的指针
char date; //存放节点数据内容
struct tree *right; //存放右子树的指针
};
typedef struct tree treenode; //声明新类型树结构
typedef treenode *b_tree; //声明二叉树的链表
/*-------------------------------------------------------*/
/* 使用递归建立二叉树 */
/*-------------------------------------------------------*/
b_tree create_btree(int *nodelist,int position)
{
b_tree newnode; //申明新结点指针
if(nodelist[position]==0||position>7)
return NULL;
else
{
/*---------建立新结点的内存空间--------*/
newnode = (b_tree)malloc(sizeof(treenode));
/*---------建立结点内容----------------*/
newnode->date = nodelist[position];
/*---------递归建立左子树--------------*/
newnode->left = create_btree(nodelist,2*position);
/*----------递归建立右子树-------------*/
newnode->right = create_btree(nodelist,2*position+1);
return newnode;
}
}
/*------------------------------------------------------*/
/* 二叉前序遍历打印节点内容 */
/*------------------------------------------------------*/
void preorder(b_tree point)
{
if(point!=NULL) //遍历终止条件
{
printf("%c",point->date); //处理打印节点内容
preorder(point->left); //处理左子树
preorder(point->right); //处理右子树
}
}
/*------------------------------------------------------*/
/* 二叉中序遍历打印节点内容 */
/*------------------------------------------------------*/
void postorder(b_tree point)
{
if(point!=NULL) //遍历终止条件
{
preorder(point->left); //处理左子树
printf("%c",point->date);
preorder(point->right); //处理右子树
}
}
/*------------------------------------------------------*/
/* 二叉后序遍历打印节点内容 */
/*------------------------------------------------------*/
void postorder(b_tree point)
{
if(point!=NULL) //遍历终止条件
{
preorder(point->left); //处理左子树
preorder(point->right); //处理右子树
printf("%c",point->date);
}
}
/*---------------------------------------------------*/
/* 抽取运算值并计算 */
/*---------------------------------------------------*/
int get_value(int oper,int oper1,int oper2)
{
switch((char) oper)
{
case '+':
return (oper1+oper2);
case '/':
return (oper1/oper2);
case '*':
return (oper1*oper2);
case '-':
return (oper1-oper2);
}
}
/*-----------------------------------------------------*/
/* 计算表达式结果值 */
/*-----------------------------------------------------*/
int calculate(b_tree point)
{
int oper1 = 0; //前操作数变量
int oper2 = 0; //后操作数变量
if(point->left==NULL && point->right==NULL)
return point->date;
else
{
oper1 = calculate(point->left); //坐子树
oper2 = calculate(point->right);
return get_value(point->date,oper1,oper2);
}
}
/*-----------------------------------------------*/
/* 主函数 */
/*-----------------------------------------------*/
void main()
{
b_tree root = NULL; //声明表达式二叉树指针
int cal_result;
int nodelist[8] = {'+','-','*','/','4','8','6','2'};
root = create_btree(nodelist,1); //建立表达式二叉树
printf("\npreorder expression:["); //前序打印
preorder(root);
printf("]\n");
printf("\nInorder expression:["); //中序打印
preorder(root);
printf("]\n");
printf("\nPostorder expression:["); //后序打印
preorder(root);
printf("]\n");
cal_result = calculate(root); //计算表达式结果
printf("\ncalulate result is [%2d]\n",cal_result);
}