#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
bool notroot[15] = { false };
struct Node
{
int lchild, rchild;
}node[15];
int n,num=0;
void print(int a)
{
num++;
printf("%d", a);
if (num != n) printf(" ");
else printf("\n");
}
//层序输出
void level(int root)
{
queue<int> q;
q.push(root);
while (q.size() != 0)
{
int now = q.front();
q.pop();
print(now);
if (node[now].lchild != -1) q.push(node[now].lchild);
if (node[now].rchild != -1) q.push(node[now].rchild);
}
}
//中序输出
void inorder(int root)
{
if (root == -1) return;
inorder(node[root].lchild);
print(root);
inorder(node[root].rchild);
}
//后序反转
void post(int root)
{
if (root == -1) return;
post(node[root].lchild);
post(node[root].rchild);
swap(node[root].lchild, node[root].rchild);
}
int main()
{
char a, b;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
getchar();
scanf("%c %c", &a, &b);
if (a >= '0'&&a <= '9')
{
node[i].lchild = a - '0';
notroot[a - '0'] = true;
}
else node[i].lchild = -1;
if (b >= '0'&&b <= '9')
{
node[i].rchild = b - '0';
notroot[b - '0'] = true;
}
else node[i].rchild = -1;
}
int root;
for (int i = 0; i < n; i++)
{
if (notroot[i] == false)
{
root = i;
break;
}
}
post(root);
level(root);
num = 0;//要把num归零,重新计算下一个的print的个数
inorder(root);
return 0;
}
A1102 Invert a Binary Tree (25 分)二叉树的静态写法
最新推荐文章于 2020-05-03 22:51:30 发布