判断两棵树是否相同(长子—兄弟表示法)

思路:采用递归的思想, 先判断两棵树的根节点的元素是否相同,再递归调用本算法依次判断两棵树根结点的每对子树是否相同。

时间复杂度:每个结点访问一次,故时间代价为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;        //两棵子树根结点的子树个数不相等

  }

posted @ 2012-09-10 19:29  毛毛hhmm  阅读(725)  评论(0编辑  收藏  举报