zoukankan      html  css  js  c++  java
  • 判断两棵树是否相等

    题目:请实现两棵树是否相等的比较,相等返回1,否则返回其他值,并说明算法复杂度。

    数据结构为:

    typedef struct_TreeNode{
    char c;
    TreeNode *leftchild;
    TreeNode *rightchild;
    }TreeNode;

    函数接口为:int CompTree(TreeNode* tree1,TreeNode* tree2);

    注:A、B两棵树相等当且仅当Root->c==RootB–>c,而且A和B的左右子树相等或者左右互换相等。

    如果是单纯比较树则这个问题比较简单,这个地方有一个左右互换相等,需要特别处理一下:

    如下图,就是相同的树,左右互换相等。

    仔细分析一下,如果用递归算法,可以很简单的得到一个解:

    对于2个孩子的节点,A与B是否相等等同于

    compare(A.left, B.left) && compare(A.right, B.right) || compare(A.left, B.right) && compare(A.right, B.left)

    实现程序如下:

    int CompTree(TreeNode* tree1,TreeNode* tree2)
    {
    if(tree1 == NULL && tree2 == NULL)
    return 1;

    if(tree1 != NULL && tree2 != NULL)
    {
    if(tree1->c == tree2->c)
    {
    if(CompTree(tree1->leftchild, tree2->leftchild) &&
    CompTree(tree1->rightchild, tree2->rightchild) ||
    CompTree(tree1->rightchild, tree2->leftchild) &&
    CompTree(tree1->leftchild, tree2->rightchild))
    {
    return 1;
    }
    }
    }

    return 0;
    }
  • 相关阅读:
    python2和3使用pip时的问题
    Python爬虫-爬取百度贴吧帖子
    Python爬虫-爬取糗事百科段子
    keras例子-matchnet
    win10-Anaconda2-Theano-cuda7.5-VS2013
    caffe-win10-cifar10另
    PHP——0126最初
    PHP——动态随机数
    PHP——投票
    PHP——内测:联系人管理
  • 原文地址:https://www.cnblogs.com/gzhu/p/2275581.html
Copyright © 2011-2022 走看看