bool compareTree(Node* tree1, Node* tree2) { if (tree1->value != tree2->value) return false; if (tree2->left != NULL) { if (tree1->left == NULL) { return false; } if (!compareTree(tree1->left, tree2->left)) return false; } if (tree2->right != NULL) { if (tree1->right == NULL) { return false; } if (!compareTree(tree1->right, tree2->right)) return false; } return true; }
// TODO: this need to e updated for states static bool compareTree(const ModelNode &node1, const ModelNode &node2) { if (!node1.isValid() || !node2.isValid()) { return false; } if (node1.type() != node2.type()) { return false; } // Compare properties { const QList<AbstractProperty> propList1 = node1.properties(); const QList<AbstractProperty> propList2 = node2.properties(); QList<AbstractProperty>::const_iterator iter1 = propList1.constBegin(); QList<AbstractProperty>::const_iterator iter2 = propList2.constBegin(); for (; iter1 != propList1.constEnd() && iter2 != propList2.constEnd(); iter1++, iter2++) { if (!compareProperty(*iter1, *iter2)) return false; } if (iter1 != propList1.constEnd() || iter2 != propList2.constEnd()) return false; } // Compare list of children { const QList<ModelNode> childList1 = node1.allDirectSubModelNodes(); const QList<ModelNode> childList2 = node2.allDirectSubModelNodes(); QList<ModelNode>::const_iterator iter1; QList<ModelNode>::const_iterator iter2; for (iter1 = childList1.constBegin(), iter2 = childList2.constBegin(); iter1 != childList1.constEnd() && iter2 != childList2.constEnd(); iter1++, iter2++) { if (!compareTree((*iter1), (*iter2))) return false; } if (iter1 != childList1.constEnd() || iter2 != childList2.constEnd()) return false; } return true; }
int morf_node::compareTree(morf_node* a, morf_node* b) { int i; if (a==NULL && b == NULL) return 0; if (b==NULL && a != NULL) return 1; if (a==NULL && b != NULL) return 1; compareNode( a, b ); if( a->subnodes.size() != b->subnodes.size() ) return 1; for (i=0;i<a->subnodes.size();i++){ if( compareTree(a->subnodes[i], b->subnodes[i]) != 0 ) return 1; } return 0; }
bool searchTree(Node* tree1, Node* tree2) { if (tree2 == NULL) return false; if (tree1->value == tree2->value) { if (compareTree(tree1, tree2)) { return true; } } if (tree1->left != NULL) { if (searchTree(tree1->left, tree2)) { return true; } } if (tree1->right != NULL) { if (searchTree(tree1->right, tree2)) { return true; } } return false; }