我看到几个关于如何确定两棵树在其结构方面是否相同的帖子,但是没有找到关于如何找到两棵树在内容方面是否相同的任何答案.
比如说,树节点定义如下.
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进行比较
>返回相同!