题目大意
给定一棵树,要求你按给定的叶子节点顺序对整棵树进行遍历,并且恰好经过2*n-1个点,输出任意一条符合要求的路径
题解
每次从叶子节点开始遍历到上一个叶子节点就OK了, 这个就是符合要求的路径
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; #define MAXN 305 vector<int>G[MAXN],ans; bool dfs(int rt,int u,int fa) { if(rt==u) return true; int len=G[u].size(); for(int i=0;i<len;i++) { int v=G[u][i]; if(fa==v) continue; if(dfs(rt,v,u)) { ans.push_back(u); return true; } } return false; } int main() { //freopen("tree.txt","r",stdin); int n; scanf("%d",&n); for(int i=1; i<n; i++) { int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); } ans.push_back(1); int rt=1,v; while(scanf("%d",&v)!=EOF) { dfs(rt,v,-1); rt=v; } dfs(rt,1,-1); if(ans.size()!=(2*n-1)) printf("-1 "); else { for(size_t i=0;i<ans.size();i++) printf("%d ",ans[i]); printf(" "); } return 0; }