Golang postorder-traversal solution
go\ntype cs struct {\n\tchildren []int\n\tsummary  int\n}\n\nfunc countHighestScoreNodes(parents []int) int {\n\tmagic := make([]*cs, len(parents))\n\tfor i := 
```go\ntype cs struct {\n\tchildren []int\n\tsummary  int\n}\n\nfunc countHighestScoreNodes(parents []int) int {\n\tmagic := make([]*cs, len(parents))\n\tfor i := range magic {\n\t\tmagic[i] = &cs{\n\t\t\tchildren: make([]int, 0, 2),\n\t\t\tsummary:  1,\n\t\t}\n\t}\n\tfor i := 1; i < len(parents); i++ {\n\t\tmagic[parents[i]].children = append(magic[parents[i]].children, i)\n\t}\n\tpostOrderTraversal(magic, 0)\n\thighestScore := 1\n\tfor _, v := range magic[0].children {\n\t\thighestScore *= magic[v].summary\n\t}\n\thighestCount := 1\n\tfor i := 1; i < len(parents); i++ {\n\t\tcurrentScore := 1\n\t\tfor _, v := range magic[i].children {\n\t\t\tcurrentScore *= magic[v].summary\n\t\t}\n\t\tcurrentScore *= magic[0].summary - magic[i].summary\n\t\tif currentScore > highestScore {\n\t\t\thighestScore = currentScore\n\t\t\thighestCount = 1\n\t\t} else if currentScore == highestScore {\n\t\t\thighestCount++\n\t\t}\n\t}\n\treturn highestCount\n}\n\nfunc postOrderTraversal(magic []*cs, i int) {\n\tfor _, v := range magic[i].children {\n\t\tpostOrderTraversal(magic, v)\n\t\tmagic[i].summary += magic[v].summary\n\t}\n}\n```
['Go']