• leetcode1361


     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。

  • 相关阅读:
    Fibonacci(斐波那契)数列方法整理
    java数组可遍历但是不能作为Iterable参数传递
    欧几里得算法的证明
    List<? extends Pet>中问号的解释
    P1387 最大正方形
    P1313 计算系数
    P1049 装箱问题
    乘积最大
    P1091 合唱队形
    bsgs
  • 原文地址:https://www.cnblogs.com/asenyang/p/12350354.html
Copyright © 2020-2023  润新知