#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define rep(i,a,n) for (int i = a; i < n; i ++ )
#define repn(i,a,n) for (int i = a; i <= n; i ++ )
#define pb push_back
#define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
typedef long long ll;
typedef pair<int,int> PII;
ll gcd(ll a,ll b) { return b ? gcd(b,a % b) : a; }
const int mod = 1e9+7;
const int N = 1e5 + 10, M = 2e5 + 10;
int n;
int h[N], e[M], ne[M], idx;
bool st[N];
int f[N];
void add(int a, int b) // 添加一条边a->b
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
void dfs(int u)
{
cout << u << ' ';
st[u] = true;
if(h[u] == -1) return;
vector<int> res;
for (int i = h[u]; ~i; i = ne[i]){
if(!st[e[i]]) res.pb(e[i]);
}
sort(res.begin(), res.end());
for (int i = 0; i < res.size(); i ++ ){
if(!st[res[i]]) dfs(res[i]);
cout << f[res[i]] << ' ';
}
for (int i = h[u]; ~i; i = ne[i])
if (!st[e[i]]){
dfs(e[i]);
}
}
int main()
{
IOS;
cin >> n;
memset(h, -1, sizeof h);
n --;
while (n --){
int a, b;
cin >> a >> b;
if(a > b) swap(a, b);
add(a, b);
f[b] = a;
}
dfs(1);
return 0;
}
dfs序 + 记录路径
最新推荐文章于 2023-12-26 18:22:31 发布