1 class TreeNode: 2 def __init__(self, x): 3 self.val = x 4 self.left = None 5 self.right = None 6 7 class Solution: 8 def __init__(self): 9 self.nodelist = set() 10 self.result = True 11 12 def preVisite(self,node): 13 if node != None: 14 if node.val not in self.nodelist: 15 self.nodelist.add(node.val) 16 self.preVisite(node.left) 17 self.preVisite(node.right) 18 else: 19 self.result = False 20 21 def validateBinaryTreeNodes(self, n: int, leftChild: 'List[int]', rightChild: 'List[int]') -> bool: 22 trees = [] 23 for i in range(n): 24 temp = TreeNode(-1) 25 trees.append(temp) 26 for i in range(n): 27 left_val = leftChild[i] 28 right_val = rightChild[i] 29 if left_val != -1: 30 left = trees[left_val] 31 left.val = left_val 32 trees[i].left = left 33 if right_val != -1: 34 right = trees[right_val] 35 right.val = right_val 36 trees[i].right = right 37 self.preVisite(trees[0]) 38 inOneTree = len(self.nodelist) == n 39 return self.result and inOneTree
算法思路:二叉树的建立和遍历。
先使用左右子树的列表建立二叉树。
然后再对0号二叉树进行遍历,记录访问过的节点,
1)如果遇到之前已经访问过的节点,说明不符合二叉树。
2)如果遍历0号树后,访问的节点数量少于n,说明不只一棵二叉树。
这两种情况,都不出现,则返回True。