一、题目概述
根据给定表达式树,输出中缀式
二、思路
1、找出根结点下标,即找到不为任何结点孩子的结点。
2、中序遍历,根节点和叶子结点不输出额外的括号。
三、代码
#include <cstdio>
#include <vector>
using namespace std;
vector<int> lchild(21), rchild(21), isroot(21, 1);
char data[21][11];
void inorder(int t, int root)
{
if(t != -1)
{
int flag = (t != root && (lchild[t] != -1 || rchild[t] != -1));
printf("%s", flag ? "(":"");
inorder(lchild[t], root);
printf("%s", data[t]);
inorder(rchild[t], root);
printf("%s", flag ? ")":"");
}
}
int main()
{
int N, root;
scanf("%d", &N);
for(int i = 1; i <= N; ++i)
{
scanf("%s %d %d", data[i], &lchild[i], &rchild[i]);
if(lchild[i] != -1)
isroot[lchild[i]] = 0;
if(rchild[i] != -1)
isroot[rchild[i]] = 0;
}
for(root = 1; !isroot[root]; ++root);
inorder(root, root);
}