Beispiel #1
0
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;
}
Beispiel #3
0
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;
}
Beispiel #4
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;
}