C语言 表达式树的创建与查找

#include<stdio.h>
#include<stack>
using namespace std;

typedef struct TNode{
	char data;
	struct TNode *left, *right;
}TNode, *BTree;

void preorder(BTree T){
	if(T){
		printf("%c", T->data);
		preorder(T->left);
		preorder(T->right);
	}
}

void inorder(BTree T){
	if(T){
		inorder(T->left);
		printf("%c", T->data);
		inorder(T->right);
	}
}

void postorder(BTree T){
	if(T){
		postorder(T->left);
		postorder(T->right);
		printf("%c", T->data);
	}
}

void createPost(BTree &T, char *post);

int eval(BTree T);

int main(){
	BTree T = NULL;
	char post[80];
	scanf("%s", post);
	createPost(T, post);
	preorder(T); printf("\n");
	inorder(T); printf("\n");
	postorder(T); printf("\n");
	printf("%d\n",eval(T));
}
void createPost(BTree &T, char *post){
	BTree t;
	stack<BTree> s;
	for(char *str=post;*str!='\0';str++)
	{
		if (*str>='0'&&*str<='9')
		{
			T=new TNode;
			T->data=*str;
			T->left=NULL;
			T->right=NULL;
			s.push(T); 
		}
		else
		{
			T=new TNode;
			T->data=*str;
			T->right=s.top();s.pop();
			T->left=s.top();s.pop();
			s.push(T);
		}
	}
}
int eval(BTree T){
   if(T==NULL) return NULL;
   else if(T->data>='0'&&T->data<='9') return (T->data-'0');
   //数则是叶,无需再次递归 
   else switch(T->data){//遇到操作符继续递归 
    case '+':
		return eval(T->left)+eval(T->right);break;
    case '-':
		return eval(T->left)-eval(T->right);break;
    case '*':
		return eval(T->left)*eval(T->right);break;
    case '/':
		return eval(T->left)/eval(T->right);break;
   }
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值