二叉树同构判别

二叉树同构判别:

int isomorphism(tree a,tree b){
    if ( !a && !b ) return 1;	//两个都空
    if ( (!a&&b) || (a&&!b) ) return 0;	//	一个空,一个不空
    if (a->data!=b->data) return 0;	//都不空,但数据不同
    if ( !a->left && !b->left ) return(a->right,b->right);	//左子树都空,判断右子树
    
    //左子树数据相同,判断右子树
    if ( (a->left&&b->left) && (a->left->data==b->left->data) )	
        return ( isomorphism(a->left,b->left) && isomorphism(a->right,b->right) );
    //左子树一个空,一个不空;或者左子树数据不同;交换左右子树,进行判断
    else
        return ( isomorphism(a->left,b->right) && isomorphism(a->rght,b->left) );
}

你可能感兴趣的:(数据结构与算法分析)