zoukankan      html  css  js  c++  java
  • 数据结构与算法参考答案(第九周)

    一、证明:一棵满k叉树上的叶子节点数n0和非叶子节点数n1之间满足以下关系:n0=(k-1)n1+1

    答:

    设满k叉树的结点总数为n,则有n=n0+n1。再看k叉树的分支数,除了根节点以外其余结点都有一个分支进入,分支总数为n-1,由于这些分支是由度为k的结点射出的,所以分支总数又为kn1。所以kn1=n-1=n0+n1-1。所以n0=(k-1)n1+1

     

    二、证明:由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树。

    答:

    用数学归纳法进行证明。

    n=1时,结论显然可知成立。

    假设当n<=k时,结论成立。当n=k+1时,假设前序序列为{a1,a2,a3,...am},假设中序序列为{b1,b2,b3,...bm}

    可以知道存在bja1相同。如果j=1,二叉树无左子树,显然由{a2,a3,...am}{b2,b3,...bm}可以唯一确定一个二叉树的右子树。如果j=m,二叉树无右子树,由{a2,a3,...am}{b1,...bm-1}可以唯一确定一个二叉树的左子树。如果j为其他情况,由{a2,...aj}{b1,...bj-1}可以唯一确定一个二叉树的左子树。由{aj+1,...am}{bj+1,...bm}可以唯一确定一个二叉树的右子树。

    综上,由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树。

    若已知两棵二叉树B1B2皆为空,或者皆不空且B1的左、右子树和B2的左、右子树分别相似,则称二叉树B1B2相似。试编写算法,判别给定两棵二叉树是否相似。

    答:

    采用递归的思想求解。若B1B2都是空树,则相似;若有一个为空另一个不为空,则不相似;否则递归地比较他们的左、右子树是否相似。最后得到结果。

    该算法实现的伪代码如下:

    /*
        函数名称:判断两棵二叉树是否相似的递归算法 
        传入参数:两个需要判断的二叉树
        返回值:相似返回TRUE否则返回FALSE
    */
    Status isSimilar(BiTree B1, BiTree B2)
    {
       
        if(!B1 && !B2)  //如果两树皆空表明相似
            return TRUE; 
        else if(B1 && !B2 || !B1 && B2) //如果只有一个树为空表明不相似
            return FALSE;
        else{
            if(isSimilar(B1 -> lchild, B2 -> lchild) && isSimilar(B1 -> rchild, B2->rchild))    
            //递归判断左右子树是否相似
                return TRUE;
            else
                return FALSE;    
        }
    }
    

     算法分析:本算法通过递归的方法实现,代码简洁,是解决该问题的较好的方法。

    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Scrum是脆弱的,不敏捷的
    Solr 全文搜索
    Java并发之线程封闭
    Java中的关键字synchronized
    Java并发框架:Executor
    锁,表锁,行锁,页锁,共享锁,排他锁
    事务及事务隔离
    MySql存储引擎:innodb myisan memory
    树,二叉树
    B树(B-树) 、B+树
  • 原文地址:https://www.cnblogs.com/lightac/p/12832556.html
Copyright © 2011-2022 走看看