func validateTree(t *pb.TreeNode) error { if isLeaf(t) { if t.GetLeft() != nil || t.GetRight() != nil { return fmt.Errorf("leaf has non-zero children: %v", t) } return nil } // not a leaf - must have both children if t.GetLeft() == nil || t.GetRight() == nil { return fmt.Errorf("branch has nil children: %v", t.String()) } err := validateTree(t.GetLeft()) if err != nil { return err } err = validateTree(t.GetRight()) if err != nil { return err } return nil }