1130 Infix Expression (25 分)

题目大意:求一个二叉树的中缀表达式

首先表达式树是不存在左孩子非空,右孩子空的情况。

直接根据中序遍历,不过需要加上()表示运算的优先级,在中序遍历的时候,不是根结点且不是叶子结点输出括号即可。

#include <iostream>

using namespace std;
int n,m,root;
struct node
{
	string v;
	int l,r;
}e[100];
bool st[100];
void dfs(int u )
{   
	if(root != u && e[u].r != -1) cout << '(';
	if(e[u].l != -1) dfs(e[u].l);
	cout << e[u].v;
	if(e[u].r != -1) dfs(e[u].r);
	if(root != u && e[u].r != -1) cout << ')';
}
int main()
{
	cin >> n;
	for(int i = 1 ; i <= n ; i++)
	{
		string c;int l,r;
		cin >> c >> l >> r;
		if(l != -1) st[l] = 1;
		if(r != -1) st[r] = 1;
		e[i] = {c,l,r};
	}
	for(int i = 1; i <= n; i++) if(!st[i]) root = i;
	dfs(root);
	return 0;
}

上一篇:PAT 1048 Find Coins (25 分) map or Hash散列


下一篇:25 vue之axios