第九周项目3(5)- 判断二叉树是否相似

来源:互联网 发布:大数据 宣传片 脚本 编辑:程序博客网 时间:2024/06/06 04:40
  1. /* 
  2. *Copyright(c)2017,烟台大学计算机学院 
  3. *All right reserved. 
  4. *文件名:sk.cpp btree.h btree.cpp 
  5. *作者:盛凯 
  6. *完成日期:2017年11月10日 
  7. *版本号:v1.0 
  8. * 
  9. *问题描述:判断二叉树是否相似
  10. *输入描述:无 
  11. *程序输出:见运行结果 

  12. sk.cpp:
  13. #include <stdio.h>
    #include "btree.h"


    int Like(BTNode *b1,BTNode *b2)
    {
        int like1,like2;
        if (b1==NULL && b2==NULL)
            return 1;
        else if (b1==NULL || b2==NULL)
            return 0;
        else
        {
            like1=Like(b1->lchild,b2->lchild);
            like2=Like(b1->rchild,b2->rchild);
            return (like1 & like2);
        }
    }


    int main()
    {
        BTNode *b1, *b2, *b3;
        CreateBTNode(b1,"B(D,E(H(J,K(L,M(,N)))))");
        CreateBTNode(b2,"A(B(D(,G)),C(E,F))");
        CreateBTNode(b3,"u(v(w(,x)),y(z,p))");
        if(Like(b1, b2))
            printf("b1和b2相似\n");
        else
            printf("b1和b2不相似\n");
        if(Like(b2, b3))
            printf("b2和b3相似\n");
        else
            printf("b2和b3不相似\n");
        DestroyBTNode(b1);
        DestroyBTNode(b2);
        DestroyBTNode(b3);
        return 0;
    }
  14. 程序运行结果如图所示:

  15. 反思总结:
  16. 利用递归层层访问左右子树,直到访问为空。