#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define fi first
#define se second
#define task "text"
const int N = 2e5+5;
const int LG = 19;
int anc[N][LG];
int h[N],sz[N],val[N];
vector<int> adj[N];
int n;
int ans[N];
void dfs(int u,int p){
h[u]=h[p]+1;
anc[u][0]=p;
for(int lg=1;lg<LG;lg++) anc[u][lg]=anc[anc[u][lg-1]][lg-1];
sz[u]=1;
for(int v:adj[u]){
if(v==p) continue;
dfs(v,u);
sz[u] += sz[v];
}
}
int lca(int u,int v){
if(h[u]<h[v]) swap(u,v);
int d=h[u]-h[v];
for(int lg=LG-1;lg>=0;lg--){
if((d&(1<<lg))>0)u=anc[u][lg];
}
if(u==v) return u;
for(int lg=LG-1;lg>=0;lg--){
if(anc[u][lg] != anc[v][lg]){
u=anc[u][lg];
v=anc[v][lg];
}
}
return anc[u][0];
}
int dist(int u,int v){
int lc=lca(u,v);
return h[u]+h[v]-2*h[lc];
}
int lab[N];
int da[N],db[N];
pair<int,int> e[N];
int mxdia=0;
int findpar(int u){
if(lab[u]<0) return u;
return lab[u]=findpar(lab[u]);
}
void unite(int u,int v){
u=findpar(u);
v=findpar(v);
if(u==v) return;
if(lab[u]>lab[v]) swap(u,v);
lab[u] += lab[v];
lab[v] = u;
vector<int> ver;
ver.push_back(da[u]);
ver.push_back(da[v]);
ver.push_back(db[u]);
ver.push_back(db[v]);
for(int i=0;i<4;i++){
for(int j=i+1;j<4;j++){
if(dist(ver[i],ver[j]) > dist(da[u],db[u])){
da[u]=ver[i];
db[u]=ver[j];
}
}
}
mxdia=max(mxdia,dist(da[u],db[u]));
return;
}
int main(){
ios::sync_with_stdio(false);cin.tie(nullptr);
if(fopen(task".inp","r")){
freopen(task".inp","r",stdin);
}
cin>>n;
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
e[i]={u,v};
}
dfs(1,0);
memset(lab,-1,sizeof lab);
for(int i=1;i<=n;i++){
da[i]=db[i]=i;
}
for(int i=1;i<n;i++){
if(h[e[i].fi] < h[e[i].se]) swap(e[i].fi,e[i].se);
}
sort(e+1,e+n,[&](pair<int,int> a,pair<int,int> b){
return min(sz[a.fi],n-sz[a.fi]) < min(sz[b.fi],n-sz[b.fi]);
});
int i=n-1;
for(int va=n;va>=1;va--){
while(i>=1 && min(sz[e[i].fi],n-sz[e[i].fi]) >= va){
//cerr<<va<<' '<<i<<'\n';
unite(e[i].fi,e[i].se);
i--;
}
ans[va]=mxdia+1;
}
for(int i=1;i<=n;i++){
if(i%2==1) cout<<1<<'\n';
else cout<<ans[i/2]<<'\n';
}
}