题目链接
注意点:1.二叉树的静态写法,会涉及到根是谁的问题,可利用数组hashT记录有哪些节点是孩子
2.添加左右括号可通过判断此节点是否有左右孩子节点,但要注意最外层的括号是没有的
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
struct Node
{
string s;
int lch, rch;
};
Node Tree[30];
string ans = "";
void inOR(int num, int root) {
int flag = 0;
if (num == -1) return;
if ((Tree[num].lch != -1 || Tree[num].rch != -1) && num != root) {
flag = 1;
}
if (flag == 1)
ans += "(";
inOR(Tree[num].lch, root);
ans += Tree[num].s;
inOR(Tree[num].rch, root);
if (flag == 1)
ans += ")";
}
int n;
int hashT[30];
int findROOT() {
for (int i = 1; i <= n; i++) {
if (hashT[i] != 1)
return i;
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
cin >> Tree[i].s >> Tree[i].lch >> Tree[i].rch;
if (Tree[i].lch != -1)
hashT[Tree[i].lch] = 1;
if (Tree[i].rch != -1) {
hashT[Tree[i].rch] = 1;
}
}
int root = findROOT();
inOR(root, root);
cout << ans;
return 0;
}