树的遍历——DFS与BFS
posted on 2019-08-28 16:45:21 A.树的遍历 题目描述 给定一棵 \(n\) 个节点的无根树(节点编号 \(0\) 至 \(n-1\) )和一个节点 \(x\) ,请以 \(x\) 号节点为根,做一次 DFS 与一次 BFS 。 输入格式 从标准输入读入数据。 第一行输入一个正整数 \(n\) ( \(1 \leq n \leq 200000\) ),代表这棵树的节点数目。 接下来 $ n-1 $ 行(行编号从 $ 1 $ 至 $ n-1 $),第 \(i\) 行输入一个正整数 $ a_i \((\) 0 \leq a_i \leq i $),代表第 \(i\) 个节点与第 $ a_i $ 个节点之间连有一条边。 最后一行输入 $ x \((\) 0 \leq x < n $),代表根节点编号。 输出格式 输出到标准输出。 输出 $ 2 $ 行,每行 $ n $ 个数,第 $ 1 $ 行代表 DFS 序,第 $ 2 $ 行代表 BFS 序。 注意:如果一个节点有多个儿子,那么应按照儿子编号递减的顺序去遍历。 样例1输入 7 0 1 0 0 1 4 1 样例1输出 1 5 2 0 4 6 3 1 5 2 0 4 3 6 解: #include <iostream> #include <cstdio> #include <cstring> #include