题目链接
给出节点数以及可能组成二叉树的若干个左右儿子关系
判断给出的信息是否为一棵二叉树
常规递归遍历节点X,X取自[0, N)
若单次遍历中
- 发现重复遍历节点,则构成回路不为二叉树
- 遍历到了所有节点且没有构成回路,则为二叉树
Runtime: 32 ms (beats 98.85%)
Memory Usage: 6.5 MB
func validateBinaryTreeNodes(n int, leftChild []int, rightChild []int) (ans bool) {
dump := make(map[int]bool)
res := false
var dfs func(curr int)
dfs = func(curr int) {
if curr == -1 || res {
return
}
if dump[curr] {
res = true
ans = false
return
}
dump[curr] = true
dfs(leftChild[curr])
dfs(rightChild[curr])
}
for i := 0; i < n; i++ {
dump = make(map[int]bool)
dfs(i)
if !res && len(dump) == n {
res = true
ans = true
break
}
}
return
}