考研数据结构(每日一题)
题目:试设计判断两棵二叉树是否相似的算法。所谓二叉树T1和T2相似,指的是T1和T2都是空的二叉树或都只有一个根结点,或T1的左子树和T2的左子树是相似的,且T1的右子树和T2的右子树是相似的。
算法思想:
采用递归的思想。
若T1和T2都是空树,则相似;
若有一个为空另一个不为空,则不相似;
递归的比较它们的左右子树是否相似。
f(T1,T2) = 1; T1== T2 == NULL
f(T1,T2) = 0; T1和T2其中一个为NULL,另一个不为NULL
f(T1,T2) = f(T1->lchild,T2->lchild)&&f(T1->rchild,T2->rchild); T1和T2均不为NULL
完整代码:
int similar(BiTree T1,BiTree T2){
int leftS,rightS;
if(T1 == NULL && T2 == NULL){ //两树为空
return 1;
}else if(T1 == NULL || T2 == NULL){ //其中一个为空
return 0;
}else{ //递归判断
leftS = similar(T1 -> lchild,T2 -> lchild);
rightS = similar(T1 -> rchild,T2 -> rchild);
return leftS && rightS;
}
}