这个错误如何改啊

taoran070521047 2008-12-07 02:02:40
/*-------------------------------------------------------*/
/*程序目的:建立表达式二叉树并计算其结果 */
/*-------------------------------------------------------*/

#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);

}










...全文
43 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ynkmhp 2008-12-07
  • 打赏
  • 举报
回复
UP~

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧