#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using ld = long double;
using D = double;
using uint = unsigned int;

#ifdef WIN32
    #define LLD "%I64d"
#else
    #define LLD "%lld"
#endif

#define pb push_back
#define mp make_pair
#define all(x) begin(x), end(x)
#define fi first
#define se second

const int maxn = 100005;

vector<int> gr[maxn];
int n;
int ans[maxn];

pair<int, int> go(int cur, int pr, int k)
{
	vector<int> down;
	pair<int, int> ans = {0, 1};
	for (auto v : gr[cur]) if (v != pr)
	{
		auto t = go(v, cur, k);
		ans.fi += t.fi;
		ans.se += t.se;
		down.pb(t.se);
	}
	if (ans.se > k)
	{
		sort(all(down));
		for (int i = (int)down.size() - 1; i >= 0 && ans.se > k; i--)
		{
			ans.fi++;
			ans.se -= down[i];
		}
	}
	return ans;
}

int main()
{
	scanf("%d", &n);
	for (int i = 0; i < n - 1; i++)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		a--, b--;
		gr[a].pb(b);
		gr[b].pb(a);
	}
	for (int i = 0; i < n; i++) ans[i] = n;
	for (int i = 1; i <= n; i++)
	{
		int min_cuts = go(0, -1, i).first;
		ans[min_cuts] = min(ans[min_cuts], i);
	}
	for (int i = 1; i < n; i++) ans[i] = min(ans[i], ans[i - 1]);
	for (int i = 1; i < n; i++) printf("%d ", ans[i]);
	printf("\n");
    return 0;
}