数据结构与算法参考答案(第九周)

一、证明:一棵满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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/lightac/p/12832556.html