如何判断二叉树左右子树相似

论坛 期权论坛 期权     
C洛依   2018-4-26 13:42   4811   1
分享到 :
0 人收藏

1 个回复

倒序浏览
2#
ycsxm  1级新秀 | 2018-4-30 02:31:59 发帖IP地址来自
这个题目非常好,是智力题,感兴趣就替你想想:
首先要搞清什么叫“相似”,这要定义好:
如果有两个树的左右子树也对应相类,称“相似”。那程序就好编了,象遍历一样,仍用“递归”。
算法:
1. 如果两个树,都是空,就是相似;
2. 如果两个树都不空,左子树与左子树也相似,右子树与右子树也相类,则这两树相似,
  这里明显是递归了;
3. 否则,两树中肯定有一个为空,另一个不为空,这种情况不相类;
假设树类型TTree,有左子树Left,右子树RIght,  两树t1,t2 判定相似的子程序:
bool  isLike(TTree: t1,TTree: t2)
  {
     if   (t1==NULL   &&   t2==NULL)
           return(true);          //  空树,相似
   else
     if  (t1!=NULL   &&   t2!=NULL)
         {    //  有递归,下面拆开的目的,提高递归效率
           if ( ! isLike(t1->Left,t2->Left))
                             return(false);              //  左跟左不相似,则树不相似
           if (! isLike(t1->Right,t2->Right))
                             return(false);             //   右跟右不相似,则树不相似
           return(true);                     //  排除了不相似的情况,就是相似的了
     }
    else
            return(false);              // 剩下的情况就是一个空,另一个不空,肯定不相似
}

main()
{
         TTree   tree;
        //.................
         if (tree==NULL)
              ; // 显示树为空
     else
              if (isLIke(tree->Left,tree->Right))
                  ; //  显示“ 树左右子树相似”
        else
                  ; //  显示“树左右子树不相似
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP