表达式二叉树(使用栈)

这篇博客介绍了如何使用栈来实现表达式二叉树与前中后缀表达式的相互转换。通过判断用户输入的表达式类型,建立相应的二叉树,并根据用户选择将二叉树转换回原表达式。文章提供了源代码示例,但仅支持一位数的输入。转换过程中注意了运算符的优先级,如*/高于+-,并适时添加括号以确保正确性。
摘要由CSDN通过智能技术生成

前言

这一次上机的题目就是将表达式二叉树进行相互转换。上一次说到了中缀表达式转后缀表达式,而这次是表达式二叉树转换成前中后缀表达式,只需要改变遍历方式即可。但是老师要只能使用栈。所以就需要保存结点。

需求分析

  1. 输入任意的前中后缀表达式,所以需要判断是哪一种表达式。
  2. 根据不同的表达式,建立同样的二叉树。再将二叉树表示出来。
  3. 按照用户输入,将二叉树转换成对应的表达式输出。

程序功能

将表达式转换成二叉树,再将二叉树转换成表达式。(本例子只能支持一位数的输入)

源代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#define MaxSize 50
typedef int ElementType;
typedef struct bnode {
   
	ElementType data;
	struct bnode *l, *r;
}bnode, *btree;//bnode指向btree的指针

void DispTree(btree b);//显示一颗二叉树
//将前缀转换为二叉树
btree Pertree(char s[], int len) {
   
	int i;
	btree p, root;
	//临时栈,用来存放指向树节点的指针
	struct stack {
   
		bnode *v[MaxSize];
		int top;
	};
	struct stack q;
	q.top = 0;

	//遍历字符串
	for (i = len-1; i >=0; i--) {
   
		if ( s[i] == '+' || s[i] == '/' || s[i] == '*' || s[i] == '-'){
   
			p = (btree)malloc(sizeof(bnode));
			p->data = s[i];			
			p->r = q.v[q.top--];
			p->l = q.v[q.top--];
			q.v[++q.top] = p;//根节点入栈
		}
		else{
   
			p = (btree)malloc(sizeof(bnode));
			p->data = s[i];
			p->l = NULL;
			p->r = NULL;
			q.v[++q.top] = p;//根节点入栈
		}
		

	}
	root = q.v[q.top];
	return root;
}
//将后缀转换成二叉树
btree PostTree(char s[], int len) {
   
	int i;
	btree p, root;
	//临时栈,用来存放指向树节点的指针
	struct stack {
   
		bnode *v[MaxSize];
		int top;
	};
	struct stack q;
	q.top = 0;

	//遍历字符串
	for (i = 0; i < len; i++) {
   
		if (s[i] == '+' || s[i] == '/' || s[i] == '*' || s[i] == '-') {
   
			p = (btree)malloc(sizeof(bnode)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值