我想知道是否有任何有效的算法可以找到一个大二叉树t中的一组小二叉树S={tç1,t婍2,…,t婍n}的匹配项这里的二叉树是有序的和有标签的,即每个节点都有一个标签,左/右子节点不能交换。
t中t_i的“匹配”意味着t的子树(连接的组件)与t_i相同。
天真的方法是扫描t的每个节点,并尝试逐个匹配t_1、t_2、…。我在想,是否有类似于Aho Croskik字符串匹配算法,它通过线性时间复杂度(W.R.T.将所有字符串和文本的长度之和)定位在一个长文本中的一组短字符串(模式)。
提前谢谢任何指向参考文献等的指针也将非常感谢!

最佳答案

用顺序和后序(或前序)遍历字符串表示子树和大树。如果你发现二阶、后序(或前序)串都是大树的后序、后序的子串,那么就有一个匹配(可以用线性时间复杂度使用KMP检查它是否是子串)。

关于algorithm - 匹配另一棵大二叉树中的多个二叉树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25075936/

10-11 19:34
查看更多