zoukankan      html  css  js  c++  java
  • 245. 子树

    245. 子树

    中文English

    有两个不同大小的二叉树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。

    样例

    样例 1:

    输入:{1,2,3,#,#,4},{3,4}
    输出:true
    解释:
    下面的例子中 T2 是 T1 的子树:
    
               1                3
              /               / 
        T1 = 2   3      T2 =  4
                /
               4
    

    样例 2:

    输入:{1,2,3,#,#,4},{3,#,4}
    输出:false
    解释:
    下面的例子中 T2 不是 T1 的子树:
    
               1               3
              /                
        T1 = 2   3       T2 =    4
                /
               4
    

    注意事项

    若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。

     
     
    输入测试数据 (每行一个参数)如何理解测试数据?

     队列 + 子树分别判断是否相等(DFS)

     1 """
     2 Definition of TreeNode:
     3 class TreeNode:
     4     def __init__(self, val):
     5         self.val = val
     6         self.left, self.right = None, None
     7 """
     8 
     9 class Solution:
    10     """
    11     大致思路:
    12     1.循环T1节点,只需要给出一个子函数判断两个子树是否相等就可以
    13     """
    14     def isSubtree(self, T1, T2):
    15         # write your code here
    16         if not T1 and  T2: return False 
    17         if T1 and not T2: return True
    18         
    19         #放队列里面
    20         queue = [T1]
    21         while queue:
    22             cur_root = queue.pop(0)
    23             if self.isEqualTree(cur_root, T2):
    24                 return True
    25             
    26             if cur_root.left:
    27                 queue.append(cur_root.left)
    28             if cur_root.right:
    29                 queue.append(cur_root.right)
    30             
    31         return False 
    32     
    33     
    34     def isEqualTree(self, root1, root2):
    35         if not root1 and not root2: return True
    36         #假如dfs的时候任何一个root.left或者root.right没有了,这说明这两者是不相等的,子树不能截断,要到最底层
    37         if not (root1 and root2): return False 
    38         
    39         #判断值是否相等
    40         if root1.val != root2.val: return False 
    41         
    42         return self.isEqualTree(root1.left, root2.left) and self.isEqualTree(root1.right, root2.right)
    43     
  • 相关阅读:
    如何面试测试工程师?
    自动登录VSS
    软件质量浅谈
    如何在工作中更好的学习
    用例设计工具PICT — 输入组合覆盖
    如何提高送测版本的质量?
    Findbugs介绍及使用方法
    省市区三级联动(附数据库和导入模板的做法)
    EF-联合查询-结果集-Group by-统计数目
    WCF-复合类型使用;传输图片
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13416302.html
Copyright © 2011-2022 走看看