【发布时间】:2017-05-23 19:46:29
【问题描述】:
我看到几篇关于如何确定两棵树的结构是否相同的帖子,但没有找到任何关于如何确定两棵树的内容是否相同的答案。
说,树节点定义如下。
TreeNode {
string data;
TreeNode* left;
TreeNode* right
};
现在我有两棵二叉树,需要找出两棵树的内容是否相同。这两者在结构上可能不完全相同,我们也不能假设数据字符串在单词上是相同的。
例如,我们可能有以下两棵树。当我们进行 inorder walk 时,这两棵树在内容上可以被视为相同。需要明确的是,当我们连接这两个树中的所有节点字符串时,它们是相同的。即 abcdedfg
(abc)
| \
(d) (efg)
(a)
| \
(b) (cdefg)
我知道我们可以进行 inorder walk 来收集两棵树的所有字符串,我们可以比较生成的两个字符串,但我想知道是否有更有效的方法来比较两棵树,或者以某种方式走两棵树并行或创建迭代器。这些对我来说似乎都不是很明显,所以想获得一些反馈,也许还有一些代码 sn-p 以获得更好的想法。
提前致谢。
【问题讨论】:
-
我会按照你说的顺序走,但是比较直到你找到 2 个不同的元素。这在最坏的情况下具有 min(n,m) 时间复杂度,因此是可能的最快算法。
-
感谢您的评论。我刚刚更新了我的问题。如果您可以提供一些代码示例,将会很有帮助。 ;-)
-
是的,请参阅我在 python 中的完整代码的答案,它使用生成器使其更快。
-
抱歉,您是说示例中的两棵树是否相等?
-
你是如何得到这个特殊结构的,具体来说,每个节点中都有 >1 个字符?什么决定了给定节点中是否有 2 3 4 5 .. 字符?我建议,如果您将结构标准化 - 每个节点一个字符,您将获得更有效的解决方案。但同样,它不清楚上下文是什么。
标签: algorithm binary-tree