判断两棵树是否相同(长子—兄弟表示法)
思路:采用递归的思想, 先判断两棵树的根节点的元素是否相同,再递归调用本算法依次判断两棵树根结点的每对子树是否相同。
时间复杂度:每个结点访问一次,故时间代价为O(n)。
空间复杂度:递归栈空间的大小与树的高度成正比。
程序代码:
int same(CSTree t1,CSTree t2)
{
PCSNode p1,p2;
if(t1 == NULL && t2 == NULL)
return 1;
if( (t1 != NULL && t2 ==NNULL) || (t1 == NULL && t2 != NULL) )
return 0;
if((t1->info != t2->info)
return 0;
p1 = t1->lchild;
p2 = t2->lchild;
while(p1 != NULL && p2 != NULL)
{
if(same(p1,p2) == 0)
return 0; //两棵树根结点的某对子树不相同
p1 = p1->rsibling;
p2 = p2->rsibling;
}
if(p1 == NULL && p2 == NULL)
return 1; //两棵子树根结点的每对子树都相同
return 0; //两棵子树根结点的子树个数不相等
}