求基于公共节点/路径的两棵树合并的已知算法及相关资料
寻找树合并的已知算法
我正在寻找一种可合并两棵树(若可行)的算法。已在全网及Stack Overflow搜索,但未找到符合需求的内容——我认为该问题具有通用性,理应存在成熟解决方案,未找到可能是搜索术语不当导致的。
我并非请求编写代码,而是询问:是否存在针对下述问题的已知算法?给定两棵树,若存在公共节点路径(节点ID唯一)则将它们合并;若无任何公共节点,则返回这两棵树本身。合并时,共享路径节点下的子树通过半群操作(如集合合并、列表拼接)整合。
合并示例
示例1:单一公共根节点
1 1 1 | | | +-2 + +-4 = +-2 | | +-3 +-3 | +-4
两棵树共享根节点1,合并后将第二棵树的子节点4挂载到1下。
示例2:共享根路径的多节点
1 1 1 | | | +-2 +-2 +-2 | | | | | | | +-3 + | +-6 = | +-3 | | | | | | | +-4 | +-7 | +-4 | | | | +-5 +-8 | +-6 | | | +-7 | +-5 | +-8
两棵树共享从根1到2的路径,合并后整合2下的子树,同时保留各自根路径外的子节点5和8。
示例3:非根节点的共享路径
1 2 1 | | | +-2 +-4 +-2 | | | | | | +-3 + +-8 = | +-3 | | | | | | +-4 +-9 | +-4 | | | | | +-5 | +-5 | | | | | +-6 | +-6 | | | +-7 | +-8 | | | +-9 | +-7
两棵树共享路径2 -> 4,合并后将第二棵树中4下的子节点8、9挂载到第一棵树的4节点下,同时保留第一棵树的其他节点。
算法类型签名
Haskell语法
Tree a -> Tree a -> [Tree a]
C#语法
IEnumerable<Tree<T>> Combine<T>(Tree<T> x, Tree<T> y)
核心疑问
是否存在针对该问题的已知算法?若存在,其名称是什么?在哪里可查阅更多资料?我并非无法自行实现,但希望避免重复发明轮子,优先使用成熟解决方案。
内容的提问来源于stack exchange,提问作者Mark Seemann
相关产品推荐
相关产品推荐

