题意:
定义了一种新的树的遍历方式。给出一棵树的节点个数N(节点0~N-1),根节点,每个节点的左右儿子(-1表示没有),求出这棵树该种遍历序列。
思路:
模拟。
代码:
#include <cstdio>
#define N 105
int t, n, root;
int left[N], right[N];
void mix_order(int x)
{
if (x == -1) return;
else if (left[x] != -1 && left[x] > x)
{
printf("%d ", x);
mix_order(left[x]);
mix_order(right[x]);
}
else if (right[x] != -1 && right[x] > x)
{
mix_order(left[x]);
printf("%d ", x);
mix_order(right[x]);
}
else
{
mix_order(left[x]);
mix_order(right[x]);
printf("%d ", x);
}
}
int main()
{
scanf("%d", &t);
while (t --)
{
scanf("%d %d", &n, &root);
for (int i = 0; i < n; ++ i)
scanf("%d %d", &left[i], &right[i]);
mix_order(root);
printf("\n");
}
}
本文介绍了一种特殊的树遍历算法实现,通过判断左、右子节点与父节点的关系来确定遍历顺序,最终输出遍历序列。适用于给定节点数量、根节点及各节点左右子节点情况的树结构。
466

被折叠的 条评论
为什么被折叠?



