package main
import (
"bufio"
"io"
"os"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextInt := func() int {
for p < len(data) && (data[p] < '0' || data[p] > '9') {
p++
}
v := 0
for p < len(data) && data[p] >= '0' && data[p] <= '9' {
v = v*10 + int(data[p]-'0')
p++
}
return v
}
n := nextInt()
head := make([]int, n+1)
for i := 1; i <= n; i++ {
head[i] = -1
}
to := make([]int, 2*(n-1))
next := make([]int, 2*(n-1))
edgeCnt := 0
addEdge := func(u, v int) {
to[edgeCnt] = v
next[edgeCnt] = head[u]
head[u] = edgeCnt
edgeCnt++
}
for i := 0; i < n-1; i++ {
u := nextInt()
v := nextInt()
addEdge(u, v)
addEdge(v, u)
}
parent := make([]int, n+1)
order := make([]int, 0, n)
stack := make([]int, 0, n)
stack = append(stack, 1)
parent[1] = 0
for len(stack) > 0 {
u := stack[len(stack)-1]
stack = stack[:len(stack)-1]
order = append(order, u)
for e := head[u]; e != -1; e = next[e] {
v := to[e]
if v == parent[u] {
continue
}
parent[v] = u
stack = append(stack, v)
}
}
limit := n / 2
sz := make([]int, n+1)
sub := make([]int, n+1)
for i := len(order) - 1; i >= 0; i-- {
u := order[i]
s := 1
best := 0
for e := head[u]; e != -1; e = next[e] {
v := to[e]
if v == parent[u] {
continue
}
s += sz[v]
if sub[v] > best {
best = sub[v]
}
}
sz[u] = s
if s <= limit && s > best {
best = s
}
sub[u] = best
}
up := make([]int, n+1)
for _, u := range order {
top1, top2 := 0, 0
for e := head[u]; e != -1; e = next[e] {
v := to[e]
if v == parent[u] {
continue
}
val := sub[v]
if val >= top1 {
top2 = top1
top1 = val
} else if val > top2 {
top2 = val
}
}
for e := head[u]; e != -1; e = next[e] {
v := to[e]
if v == parent[u] {
continue
}
best := up[u]
if sub[v] == top1 {
if top2 > best {
best = top2
}
} else {
if top1 > best {
best = top1
}
}
comp := n - sz[v]
if comp <= limit && comp > best {
best = comp
}
up[v] = best
}
}
out := make([]byte, 0, 2*n)
for u := 1; u <= n; u++ {
mx := n - sz[u]
best := up[u]
for e := head[u]; e != -1; e = next[e] {
v := to[e]
if v == parent[u] {
continue
}
if sz[v] > mx {
mx = sz[v]
best = sub[v]
}
}
if u > 1 {
out = append(out, ' ')
}
if mx <= limit || mx-best <= limit {
out = append(out, '1')
} else {
out = append(out, '0')
}
}
out = append(out, '\n')
w := bufio.NewWriterSize(os.Stdout, 1<<20)
w.Write(out)
w.Flush()
}