美文网首页
另一个树的子树

另一个树的子树

作者: _阿南_ | 来源:发表于2020-05-07 20:13 被阅读0次

    题目:

    给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
    
    示例 1:
    给定的树 s:
    
         3
        / \
       4   5
      / \
     1   2
    给定的树 t:
    
       4 
      / \
     1   2
    返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
    
    示例 2:
    给定的树 s:
    
         3
        / \
       4   5
      / \
     1   2
        /
       0
    给定的树 t:
    
       4
      / \
     1   2
    返回 false。
    
    通过次数32,453提交次数70,016
    

    题目的理解:

    找从t开始所有节点的值都一样的子节点。

    python实现

    class Solution:
        def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
            tNodeList = list()
    
            nodeList = [s]
            while len(nodeList) > 0:
                nodeListTemp = list()
    
                for node in nodeList:
                    if node.val == t.val:
                        tNodeList.append(node)
                    if node.left is not None:
                        nodeListTemp.append(node.left)
                    if node.right is not None:
                        nodeListTemp.append(node.right)
    
                nodeList = nodeListTemp
    
            if len(tNodeList) <= 0:
                return False
    
            def isSame(node1: TreeNode, node2: TreeNode) -> bool:
                node1List = [node1]
                node2List = [node2]
    
                while len(node1List) > 0 or len(node2List) > 0:
                    node1ListTemp = list()
                    node2ListTemp = list()
    
                    if len(node1List) != len(node2List):
                        return False
    
                    for index in range(len(node1List)):
                        node1Temp = node1List[index]
                        node2Temp = node2List[index]
                        if node1Temp.val != node2Temp.val:
                            return False
    
                        if node1Temp.left is not None:
                            if node2Temp.left is None:
                                return False
                            else:
                                if node1Temp.left.val != node2Temp.left.val:
                                    return False
    
                                node1ListTemp.append(node1Temp.left)
                                node2ListTemp.append(node2Temp.left)
                        else:
                            if node2Temp.left is not None:
                                return False
    
                        if node1Temp.right is not None:
                            if node2Temp.right is None:
                                return False
                            else:
                                if node1Temp.right.val != node2Temp.right.val:
                                    return False
    
                                node1ListTemp.append(node1Temp.right)
                                node2ListTemp.append(node2Temp.right)
                        else:
                            if node2Temp.right is not None:
                                return False
                            
                    node1List = node1ListTemp
                    node2List = node2ListTemp
    
                return True
    
            result = False
            
            for node in tNodeList:
                result = isSame(node, t)
                if result:
                    return True
    
            return result
    

    想看最优解法移步此处

    提交

    100%

    刚刚还在感叹为啥代码写那么烂,然后获得了一个100%。 可以古

    // END 可能我合适当程序员,因为写代码给我快乐

    相关文章

      网友评论

          本文标题:另一个树的子树

          本文链接:https://www.haomeiwen.com/subject/ixezghtx.html