func validateBinaryTreeNodes(n int, leftChild []int, rightChild []int) bool {
// 成立条件,其他节点只有一个父亲
// 而且只有一个没有父亲
if n == 1 {
return true
}
fatherOfNodes := make([][]int, n)
for i := 0; i < len(fatherOfNodes); i++ {
fatherOfNodes[i] = make([]int, 0)
}
for i := 0; i < len(leftChild); i++ {
child := leftChild[i]
if child == -1 {
continue
}
fatherOfNodes[child] = append(fatherOfNodes[child], i) // i表示是父亲,child是孩子
}
for i := 0; i < len(rightChild); i++ {
child := rightChild[i]
if child == -1 {
continue
}
fatherOfNodes[child] = append(fatherOfNodes[child], i) // i表示是父亲,child是孩子
}
var isRoot bool
for i := 0; i < len(fatherOfNodes); i++ {
if len(fatherOfNodes[i]) > 1 {
return false
}
if len(fatherOfNodes[i]) == 0 {
if !isRoot {
// 根节点必须要有child
if leftChild[i] != -1 || rightChild[i] != -1 {
isRoot = true
} else {
// 没有father也没有哪怕一个孩子,孤立的节点
return false
}
} else {
return false
}
}
}
return isRoot
}