用c输入格式: 二叉树将以这样的形式给出: 第一行给出一个正整数N(N<=100),表示二叉树上的节点个数! 接下来N行,每行包含三个整数,i,l,r,分别代表第i个节点的左右孩子! 如果它的左/右孩子为空,则在对应位置给出-1! 题目保证1是根节点! 输出格式: 请你输出它的三种遍历! 第一行输出先序遍历,第二行输出中序遍历,第三行输出后序遍历! 每行末尾无多余空格!
时间: 2023-12-15 22:06:50 浏览: 57
世界500强面试题.pdf
以下是使用C语言编写的代码实现:
```c
#include <stdio.h>
#define MAX_N 105
struct node {
int l, r;
} tree[MAX_N];
int n, in_order[MAX_N], pre_order[MAX_N], post_order[MAX_N], idx;
void in_order_traversal(int root) {
if (root == -1) {
return;
}
in_order_traversal(tree[root].l); // 遍历左子树
in_order[idx++] = root; // 中序遍历
in_order_traversal(tree[root].r); // 遍历右子树
}
void pre_order_traversal(int root) {
if (root == -1) {
return;
}
pre_order[idx++] = root; // 先序遍历
pre_order_traversal(tree[root].l); // 遍历左子树
pre_order_traversal(tree[root].r); // 遍历右子树
}
void post_order_traversal(int root) {
if (root == -1) {
return;
}
post_order_traversal(tree[root].l); // 遍历左子树
post_order_traversal(tree[root].r); // 遍历右子树
post_order[idx++] = root; // 后序遍历
}
int main() {
scanf("%d", &n); // 输入节点个数
for (int i = 1; i <= n; i++) {
int l, r;
scanf("%d%d%d", &i, &l, &r); // 输入第i个节点的左右孩子
tree[i].l = l;
tree[i].r = r;
}
idx = 0;
pre_order_traversal(1); // 先序遍历
for (int i = 0; i < n; i++) {
printf("%d", pre_order[i]);
if (i != n - 1) {
printf(" ");
}
}
printf("\n");
idx = 0;
in_order_traversal(1); // 中序遍历
for (int i = 0; i < n; i++) {
printf("%d", in_order[i]);
if (i != n - 1) {
printf(" ");
}
}
printf("\n");
idx = 0;
post_order_traversal(1); // 后序遍历
for (int i = 0; i < n; i++) {
printf("%d", post_order[i]);
if (i != n - 1) {
printf(" ");
}
}
printf("\n");
return 0;
}
```
输入样例:
```
8
1 2 3
2 4 5
4 6 -1
6 -1 -1
5 7 -1
7 -1 -1
3 -1 8
8 -1 -1
```
输出样例:
```
1 2 4 6 5 7 3 8
6 4 2 7 5 1 3 8
6 4 7 5 2 8 3 1
```
阅读全文