int match_tree(tree *t1,tree *t2) { if(t1==NULL && t2==NULL) return 1; if(t1==NULL || t2==NULL) return 0; if(t1->element==t2->element) return match_tree(t1->left,t2->left)&&match_tree(t1->right,t2->right); }
int match_tree(TREE_NODE T1, TREE_NODE T2){ if((T1 == NULL)&&(T2 == NULL)) return 1; if((T1 == NULL)||(T2 == NULL)) return 0; if(T1->element != T2->element) return 0; return (match_tree(T1->left, T2->left) && match_tree(T1->right, T2->right)); }
int subtree(tree *t1,tree *t2) { if(t1==NULL) return 0; if(t1->element==t2->element) if(match_tree(t1,t2)) return 1; return subtree(t1->left,t2)||subtree(t1->right,t2); }
int sub_tree(BTREE T1, BTREE T2){ if(T1 == NULL){ printf("shit\n"); return 0; } if(T1->element == T2->element){ if(match_tree(T1, T2)) return 1; } return (sub_tree(T1->left, T2) ||sub_tree(T1->right, T2)); }
void operator()(const hypergraph_type& graph_in, IteratorTree tree_iter, IteratorRule rule_iter) { if (! graph_in.is_valid()) return; phrase_map.clear(); phrase_map.reserve(graph_in.nodes.size()); phrase_map.resize(graph_in.nodes.size()); // bottom-up topological order for (size_t id = 0; id != graph_in.nodes.size(); ++ id) { match_tree(id, graph_in, tree_iter); if (! grammar.empty()) match_phrase(id, graph_in, rule_iter); } }