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。

posted on 2020-02-23 16:32  Sempron2800+  阅读(166)  评论(0编辑  收藏  举报