#include <bits/stdc++.h>
using namespace std;
namespace IO {
const int __S = (1 << 20) + 5;
char __buf[__S], *__H, *__T;
inline char getc() {
  if (__H == __T) __T = (__H = __buf) + fread(__buf, 1, __S, stdin);
  if (__H == __T) return -1;
  return *__H++;
}
template <class __I>
inline void read(__I &__x) {
  __x = 0;
  int __fg = 1;
  char __c = getc();
  while (!isdigit(__c) && __c != '-') __c = getc();
  if (__c == '-') __fg = -1, __c = getc();
  while (isdigit(__c)) __x = __x * 10 + __c - '0', __c = getc();
  __x *= __fg;
}
inline void readd(double &__x) {
  __x = 0;
  double __fg = 1.0;
  char __c = getc();
  while (!isdigit(__c) && __c != '-') __c = getc();
  if (__c == '-') __fg = -1.0, __c = getc();
  while (isdigit(__c)) __x = __x * 10.0 + __c - '0', __c = getc();
  if (__c != '.') {
    __x = __x * __fg;
    return;
  } else
    while (!isdigit(__c)) __c = getc();
  double __t = 1e-1;
  while (isdigit(__c))
    __x = __x + 1.0 * (__c - '0') * __t, __t = __t * 0.1, __c = getc();
  __x = __x * __fg;
}
inline void reads(char *__s, int __x) {
  char __c = getc();
  int __tot = __x - 1;
  while (__c < '!' || __c > '~') __c = getc();
  while (__c >= '!' && __c <= '~') __s[++__tot] = __c, __c = getc();
  __s[++__tot] = '\0';
}
char __obuf[__S], *__oS = __obuf, *__oT = __oS + __S - 1, __c, __qu[55];
int __qr;
inline void flush() {
  fwrite(__obuf, 1, __oS - __obuf, stdout);
  __oS = __obuf;
}
inline void putc(char __x) {
  *__oS++ = __x;
  if (__oS == __oT) flush();
}
template <class __I>
inline void print(__I __x) {
  if (!__x) putc('0');
  if (__x < 0) putc('-'), __x = -__x;
  while (__x) __qu[++__qr] = __x % 10 + '0', __x /= 10;
  while (__qr) putc(__qu[__qr--]);
}
inline void prints(const char *__s, const int __x) {
  int __len = strlen(__s + __x);
  for (int __i = __x; __i < __len + __x; __i++) putc(__s[__i]);
}
inline void printd(double __x, int __d) {
  long long __t = (long long)floor(__x);
  print(__t);
  putc('.');
  __x -= (double)__t;
  while (__d--) {
    double __y = __x * 10.0;
    __x *= 10.0;
    int __c = (int)floor(__y);
    putc(__c + '0');
    __x -= floor(__y);
  }
}
inline void el() { putc('\n'); }
inline void sp() { putc(' '); }
}  // namespace IO
using namespace IO;
int cnt, sz[400005], usz[400005], n, x, y, g[400005], to[800005], he[400005],
    ne[800005], fm[400005], um[400005], sm[400005], ans[400005];
void dfs1(int x, int fa) {
  sz[x] = 1;
  for (int i = he[x], y; ~i; i = ne[i])
    if ((y = to[i]) != fa) {
      dfs1(y, x), sz[x] += sz[y];
      if (sz[y] > n / 2)
        g[x] = y, sm[x] = max(sm[x], fm[y]),
        sm[x] > fm[x] ? swap(sm[x], fm[x]) : void(0);
      else
        sm[x] = max(sm[x], sz[y]), sm[x] > fm[x] ? swap(sm[x], fm[x]) : void(0);
    }
  usz[x] = n - sz[x];
  if (usz[x] > n / 2) g[x] = -1;
}
void dfs2(int x, int fa) {
  if (usz[x] <= n / 2)
    um[x] = usz[x];
  else {
    if (fm[fa] == sz[x])
      um[x] = sm[fa];
    else
      um[x] = fm[fa];
    um[x] = max(um[x], um[fa]);
  }
  for (int i = he[x], y; ~i; i = ne[i])
    if ((y = to[i]) != fa) dfs2(y, x);
}
void add(int x, int y) {
  to[cnt] = y;
  ne[cnt] = he[x];
  he[x] = cnt++;
}
int main() {
  memset(he, -1, sizeof(he));
  read(n);
  for (int i = 1; i < n; i++) read(x), read(y), add(x, y), add(y, x);
  dfs1(1, 0);
  dfs2(1, 0);
  for (int i = 1; i <= n; i++) {
    if (!g[i])
      ans[i] = 1;
    else if (g[i] == -1 && usz[i] - um[i] <= n / 2)
      ans[i] = 1;
    else if (g[i] != -1 && sz[g[i]] - fm[g[i]] <= n / 2)
      ans[i] = 1;
  }
  for (int i = 1; i <= n; i++) print(ans[i]), sp();
  flush();
}
