【模板】二叉树遍历Ⅰ-A ‖ 深度优先:DFS
题号:NC285781
时间限制:C/C++/Rust/Pascal 5秒,其他语言10秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}对于给定的由 n 个节点构成的二叉树,你需要书写一个程序,使得其能够支持如下操作:
\hspace{23pt}\bullet\,输出二叉树的先序遍历;
\hspace{23pt}\bullet\,输出二叉树的中序遍历;
\hspace{23pt}\bullet\,输出二叉树的后序遍历。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(1\leqq n\leqq 2 \times 10^5\right),表示节点数量。
\hspace{15pt}此后 n-1 行,第 i 行输入三个整数 u_i, v_i, o_i \left(1\leqq u_i, v_i\leqq n;\, 0 \leqq o_i \leqq 1 \right),表示树上第 i 条边双向连接节点 u_iv_i,其中 o_i = 0 代表 v_iu_i 的左儿子,o_i = 1 代表 v_iu_i 的右儿子。
\hspace{15pt}注意,根节点不固定。

输出描述:

\hspace{15pt}第一行输出 n 个整数,表示二叉树的先序遍历。
\hspace{15pt}第二行输出 n 个整数,表示二叉树的中序遍历。
\hspace{15pt}第三行输出 n 个整数,表示二叉树的后序遍历。
示例1

输入

复制
6
5 2 0
4 3 0
4 6 1
5 4 1
2 1 0

输出

复制
5 2 1 4 3 6
1 2 5 3 4 6
1 2 3 6 4 5

说明

\hspace{15pt}在这个样例中,所构建的二叉树如下图所示: