algorithm – 如何查找两个二进制树在内容方面是否相同?

我看到几个关于如何确定两棵树在其结构方面是否相同的帖子,但是没有找到关于如何找到两棵树在内容方面是否相同的任何答案.

比如说,树节点定义如下.

TreeNode {
    string data;
    TreeNode* left;
    TreeNode* right
};

现在我有两个二叉树,需要找出两个树在内容方面是否相同.这两个可能在结构上不相同,也不能假设数据串在单词中是相同的.

例如,我们可能有两棵树.当我们进行顺序步行时,这两棵树在内容上可以被视为相同.需要说明的是,当我们连接这两棵树中的所有节点字符串时,它们是相同的.即abcdedfg

 (abc)
 |   \
 (d) (efg)

 (a)
 |  \
 (b) (cdefg)

我知道我们可以按顺序行走来收集两棵树的所有字符串,我们可以比较得到的两个字符串,但我想知道是否有更有效的方法来比较两棵树,无论是以某种方式并行地走两棵树还是创建迭代器.这些似乎对我来说都不是很明显,所以想得到一些反馈,也许还有一些代码片段可以获得更好的想法.

提前致谢.

最佳答案 您可以使用DFS(深度优先搜索)迭代两个树,逐个字符地比较.这也可以与双指算法结合使用,您可以根据您要使用的元素以不同的速度遍历每棵树的节点.

从你的例子来看.树1和树,其中节点X-Y是行X,元素Y.树1节点2-2是“efg”:

Tree 1
(abc)
 |   \
 (d) (efg)

Tree 2
 (a)
 |  \
 (b) (cdefg)

该算法将依次遍历每棵树的节点,逐个字符地进行比较.

>从树1节点1-1开始
>从树2节点1-1开始
>将a1与a2进行比较
>前进到树2节点2-1
>将b1与b2进行比较
>前进到树2节点2-2
>将c1与c2进行比较
>前进到树1节点2-1
>将d1与d2进行比较
>前进到树1节点2-2
>将e1与e2进行比较
>将f1与f2进行比较
>将g1与g2进行比较
>返回相同!

点赞