栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

标识符树的后序计算表达式的值(运算只涉及+、-、*、/)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

标识符树的后序计算表达式的值(运算只涉及+、-、*、/)

  1. 定义二叉树的结构如下:
struct tree            //定义结构体
{int data;             //定义一个整型数据域
struct tree *left;    //定义左子树指针
struct tree *right;   //定义右子树指针
};
typedefstruct tree btnode;  //树的结构类型
typedefstruct *bt;          //定义树结点的指针类型
  1. 把算术表达式2*3+6/3的标识符树存入一维数组
  2. 求标识符的前序遍历、中序遍历和后序遍历的序列
  3. 以后序计算标识符树的值

代码展示

#include
#include
#include
typedef struct CBTree {
	char  data;
	struct CBTree* left;
	struct CBTree* right;
}CBTree;

int n;//字符串长度
CBTree* CreateCBTree(int* data, int pos)
{
	CBTree* newnode;
	if (data[pos] == 0 || pos > n)
		return NULL;
	else 
	{
		newnode = (CBTree*)malloc(sizeof(CBTree));
		newnode->data = data[pos];
		newnode->left = CreateCBTree(data, 2 * pos);
		newnode->right = CreateCBTree(data, 2 * pos + 1);
		return newnode;
	}
}
void DLRPrint(CBTree* pnode)//前序输出结点
{
	if (pnode != NULL)
	{
		printf("%c", pnode->data);
		DLRPrint(pnode->left);
		DLRPrint(pnode->right);
	}
}
void LDRPrint(CBTree* pnode)//中序输出结点
{
	if (pnode != NULL)
	{
		LDRPrint(pnode->left);
		printf("%c", pnode->data);
		LDRPrint(pnode->right);
	}
}

void RDLPrint(CBTree* pnode)//后序输出结点
{
	if (pnode != NULL)
	{
		RDLPrint(pnode->left);
		RDLPrint(pnode->right);
		printf("%c", pnode->data);
	}
}

int count(CBTree* pnode)
{
	int operand1 = 0;
	int operand2 = 0;
	int num = 0;
	int getvalue(int op, int operand1, int operand2);
	if (pnode->left == NULL && pnode->right == NULL)
	{
		num = int(((pnode->data) - '0'));
		return num;
	}
	{
		operand1 = count(pnode->left);
		operand2 = count(pnode->right);
		return getvalue(pnode->data, operand1, operand2);
	}
}

int getvalue(int op, int operand1, int operand2)
{
	switch ((char)op)
	{
	case'*':return(operand1 * operand2);
	case'/':
		if (operand2 != 0)
			return (operand1 / operand2);
		else printf("除数不能为0,数学错误");
		return 0;
	case'+':return(operand1 + operand2);
	case'-':return(operand1 - operand2);
	}
}

void main()
{
	CBTree* root = NULL;
	int result;
	int k = 1;
	int data[100] = { ' ' };
	char ch;
	printf("按层次输入结点数据,以回车键表示结束n");
	while ((ch = getchar()) != 'n')
		data[k++] = ch;
		data[k] = '';
		n = k - 1;
	root = CreateCBTree(data, 1);
	printf("tn前序表达式:");
	DLRPrint(root);
	printf("tn中序表达式:");
	LDRPrint(root);
	printf("tn后序表达式:");
	RDLPrint(root);
	result = count(root);
	printf("tn表达式结果为:%dn", result);
}

代码效果呈现:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889932.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号