【问题标题】:Check if a binary tree has two identical subtrees检查二叉树是否有两个相同的子树
【发布时间】:2015-08-14 06:52:52
【问题描述】:

我想写一个方法来判断一棵树是否至少有一对相同的子树,这些子树的值和结构都必须相同。

假设给你一棵树,如下所示:

        a
       / \
      b   f
     /   / \
    c   g   d
   /   /   /
  d   h   e
 /
e

这将返回true,因为我们有一对相同的树,其根为d

我的想法是遍历每个节点并构建一个映射到tree nodes 列表的node name 映射。在每次迭代中,我们检查当前节点名称是否在地图中。如果它在,那么我们可以用当前节点调用boolean isSameTree(TreeNode t1, TreeNode t2)函数,对树节点列表中的每个节点,看看它们是否相同。

时间复杂度为 O(n^3)。我想知道我们是否可以做得更好!

【问题讨论】:

  • 为什么不在父节点构造每个分支的前缀(或中缀/后缀)表示,并在旁边散列字符串以便快速查找?

标签: algorithm data-structures tree


【解决方案1】:

您的示例树还有一对相同的树,其根为 e。通常,如果两棵树相同,则它们要么都是叶子,要么具有相同的子树。因此,您可以简化测试以检查原始树中的所有叶子是否不同,这需要 O(n) 散列操作和平均情况 Theta(n) 相等比较,除非散列非常差。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多