#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <string>
#include <vector>
#include <bitset>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cassert>
#include <queue>


typedef long long ll;
typedef long double ld;

using namespace std;

const int MAXN = 120000;

set<pair<int, int> > ss;
int sz[MAXN];
int ans[MAXN];
int ans2[MAXN];
vector<int> eds[MAXN];
int was[MAXN];
int mxp[MAXN];
int p[MAXN];
int fl[MAXN];
int n;

void dfs1(int v) {
	was[v] = 1;
	sz[v] = 1;
	mxp[v] = 0;
	for (int u: eds[v])
		if (!was[u])
			p[u] = v, dfs1(u), sz[v] += sz[u], mxp[v] = max(mxp[v], sz[u]);
	if (sz[v] == 1)
		ss.insert(make_pair(1, v));
}

pair<int, int> dfs2(int v, int k) {
	int ans = 0;
	vector<int> vv;
	int sum = 1;
	for (int u: eds[v]) {
		if (u == p[v])
			continue;
		if (fl[u]) {
			auto x = dfs2(u, k);
			ans += x.first;
			vv.push_back(x.second);
			sum += x.second;
		}
		else {
			vv.push_back(sz[u]);
			sum += sz[u];
		}
	}
	sort(vv.begin(), vv.end());
	while (sum > k) {
		++ans;
		sum -= vv.back();
		vv.pop_back();
	}
	return make_pair(ans, sum);
}


int main() {
	scanf("%d", &n);
	for (int i = 0; i < n - 1; ++i) {
		int a, b;
		scanf("%d%d", &a, &b);
		--a;
		--b;
		eds[a].push_back(b);
		eds[b].push_back(a);
	}
	p[0] = -1;
	dfs1(0);
	for (int k = 1; k < n; ++k) {
		while (!ss.empty() && ss.begin()->first <= k) {
			int x = ss.begin()->second;
			ss.erase(ss.begin());
			if (x != 0 && mxp[p[x]] <= k)
				ss.insert(make_pair(sz[p[x]], p[x]));
		}
		vector<int> vv;
		for (pair<int, int> u: ss) {
			int x = u.second;
			while (x != -1 && !fl[x])
				fl[x] = 1, vv.push_back(x), x = p[x];
		}

		ans[k] = dfs2(0, k).first;

		for (int x: vv)
			fl[x] = 0;
	}
	int now = n - 1;
	for (int j = 1; j < n; ++j) {
		for (int x = now; x >= ans[j]; --x)
			ans2[x] = j;
		now = ans[j] - 1;
	}
	for (int i = 1; i < n; ++i)
		printf("%d ", ans2[i]);
	printf("\n");
	return 0;
}
