```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for i := 0; i < t; i++ {
solve(reader, writer)
}
}
func solve(r *bufio.Reader, w *bufio.Writer) {
var n int
fmt.Fscan(r, &n)
adj := make([][]int, n+1)
deg := make([]int, n+1)
for i := 0; i < n-1; i++ {
var u, v int
fmt.Fscan(r, &u, &v)
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
deg[u]++
deg[v]++
}
if n == 1 {
fmt.Fprintln(w, 0)
return
}
majors := make([]bool, n+1)
majorCount := 0
for i := 1; i <= n; i++ {
if deg[i] >= 3 {
majors[i] = true
majorCount++
}
}
if majorCount == 0 {
fmt.Fprintln(w, 1)
return
}
ans := 0
for i := 1; i <= n; i++ {
if majors[i] {
legs := 0
for _, neighbor := range adj[i] {
if !hasMajor(neighbor, i, adj, majors) {
legs++
}
}
if legs > 0 {
ans += legs - 1
}
}
}
fmt.Fprintln(w, ans)
}
func hasMajor(u, p int, adj [][]int, majors []bool) bool {
if majors[u] {
return true
}
for _, v := range adj[u] {
if v != p {
if hasMajor(v, u, adj, majors) {
return true
}
}
}
return false
}
```