Esempio n. 1
0
/* Join at the specified components, returning new root */
static stTree *joinAtNodes(stTree *root1, stTree *node1, stTree *root2, stTree *node2, struct malnCompCompMap *srcDestCompMap) {
    if ((stTree_getParent(node1) == NULL) && (stTree_getParent(node2) == NULL)) {
        assert((root1 == node1) && (root2 == node2));
        return joinTrees(root1, node1, node2, srcDestCompMap);
    } else if (stTree_getParent(node1) == NULL) {
        assert(root1 == node1);
        return joinTrees(root2, node2, node1, srcDestCompMap);
    } else if (stTree_getParent(node2) == NULL) {
        assert(root2 == node2);
        return joinTrees(root1, node1, node2, srcDestCompMap);
    } else {
        errAbort("join nodes don't obey rules: node1: %s node2: %s", stTree_getLabel(node1), stTree_getLabel(node2));
        return NULL;
    }
}
TreeNode deleteWithJoin(TreeNode t, int value)
{
	TreeNode n;
	if (t == NULL) { return NULL; }

	if (value < t->value){
		t = deleteWithJoin(t->leftnode, value);
	}

	else if (value > t->value){
		t = deleteWithJoin(t->rightnode, value);
	}

	else{ // t->value == value
		if (t->leftnode == NULL){
			n = t->rightnode;
		}

		else if (t->rightnode == NULL){
			n = t->leftnode;
		}

		else{
			n = joinTrees(t->leftnode, t->rightnode);
		}

		free(t);
		t = n;
	}

	return t;
}