表达式二叉树(使用栈)

前言

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

需求分析

  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)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值