class Solution:
def validateBinaryTreeNodes(self, n: int, leftChild , rightChild) :
indeg = [0]*n
#统计入度
for i in range(n):
if leftChild[i] != -1:
indeg[leftChild[i]] +=1
if rightChild[i] != -1:
indeg[rightChild[i]] +=1
# print(indeg)
root = -1
#找一个入度为0的作为root
for i in range(n):
if indeg[i] == 0:
root = i
break
if root == -1:
return False
q = [root]
visited = set([root])
while q:
node = q.pop(0)
#左子
left = leftChild[node]
if left != -1:
#入队时就标记访问
if left in visited:
return False
visited.add(left)
q.append(left)
#右子
right = rightChild[node]
if right != -1:
if right in visited:
return False
visited.add(right)
q.append(right)
return len(visited) == n