时间限制 1000 ms 内存限制 64 MB
题目描述
给你一个二叉树,按照后序遍历的顺序输出这棵树。
输入数据
第一行一个整数 n (1≤n≤1e4) ,表示这棵树的节点数。 接下来有 n-1 行,每行有两个整数 u,v ,表示节点 u 到节点 v 有一条边,输入保证树以 1 为根,且 u 为 v 的父节点。对于一个节点的多个子节点,将更早输入的那一个子节点的视为他的左子节点。
输出数据
输出该树的后序遍历,节点编号之间用一个空格分隔。
样例输入
6 1 2 2 3 3 4 1 5 5 6
样例输出
4 3 2 6 5 1
样例说明
后序遍历的定义是:对访问的每个树,先访问他的左子树,然后访问他的右子树,最后访问根节点。
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> typedef struct Node { int left = 0; int right = 0; }node; node* a = new node[10000]; void find(node* &a, int i) { if (a[i].left != 0) { find(a, a[i].left); } if (a[i].right != 0) { find(a, a[i].right); } printf("%d ", i); } int main() { int n; scanf("%d", &n); for (int i = 1; i < n; i++) { int u, v; scanf("%d%d", &u, &v); if (a[u].left == 0) { a[u].left = v; } else { a[u].right = v; } } find(a, 1); return 0; }