【发布时间】:2020-10-11 02:33:29
【问题描述】:
有两棵树。树的每个节点都包含一个值,该值可以与另一棵树的另一个节点的值进行比较。如果值相等,则节点相等。
每个节点可以包含从 0 到任意数量的子节点。
需要判断是否可以在这两棵树中建立相等的路径?这些路径上的节点必须相等。两条路径都应该从顶部到包含 0 个子节点的节点。沿路径的节点数当然也应该相等。
例子:
a a a
/|\ /|\ / \
b c d 1 d z x y
| | |\ | | |
e f g h x g s
前两棵树的路径“adg”相等。第三棵树与前两棵树的路径不相等。
有现成的算法来解决这样的问题吗?如果存在,怎么称呼它,从哪里可以读到?
【问题讨论】:
-
您是否正在寻找比使用 DFS 为每棵树生成所有根到叶路径然后与这些集合相交更有效的方法?
-
生成一个集合,其中所有字符串表示较小树中的路径,然后在第二棵树中生成单词并检查每个单词是否在集合内。
-
节点中的值是否不同?
-
没有。在同一棵树中可以有多个具有相同值的节点。
-
但是同一个节点的所有子节点都是唯一的。
标签: javascript c++ algorithm tree tree-traversal