数据结构复习-树(持续更新)

数据结构快要结课啦,自己这周就先复习一下树吧!

题目是选于自己的PTA的作业题,博客的主要目的也是为了自己的结课考试鸭!

最后面也会写上自己的预测考点

知识点一:广义表

1.设广义表L=((a,b,c)),则L的长度和深度分别为( ) (2分)

         注:广义表的深度:简单的说就是括号的数量

     广义表的长度:简单的说就是广义表中元素的数量,但是一个原子可以是一个元素,一个子表也算是一个元素。(空表的长度是0)

2.广义表A=(a,b,(c,d),(e,(f,g))),则式子Head(Tail(Head(Tail(Tail(A)))))的值为()。 (2分)

        注:Head()操作取第一个原子(可以是一个子集也可以是单个元素)

               Tail()操作除了第一个原子的剩下的原子的集合,要用括号括起来的

知识点二:数组

1.三对角矩阵

 

2.行优先:行的下表变化得慢        列优先:列的下表变化得满

3.邻接矩阵的行优先和列优先存储一定要注意呀

知识点三:二叉树

1.设树T的度为4,其中度为1、2、3、4的结点个数分别为4、2、1、1。则T中有多少个叶子结点? (3分)

        注:若一棵树的度为n,那么其结点数为n+1;

2.求二叉树最大深度

//求树的深度
int Depth(BiTree T)
{
    if(!T)   return 0;
    else
    {
        int h1=Depth(T->lchild);
        int h2=Depth(T->rchild);
        return h1>h2?h1+1:h2+1;
    }
}

求二叉树最小深度

最小深度:树的根节点到任意一个叶子节点的最小距离

class Solution {
public:
    //求树的深度
    int run(TreeNode *root) {
        //边界条件
        if(!root)
            return 0;
        if(!root->left)
            return root->right+1;
        if(!root->right)
            return root->left+1;
        else 
        {
            int leftDepth = run(root->left);
            int rightDepth = run(root->right);
            return (leftDepth<rightDepth)?(leftDepth+1):(rightDepth+1);
        }
    }
};

 

3.有一个四叉树,度2的结点数为2,度3的结点数为3,度4的结点数为4。问该树的叶结点个数是多少?(2分)

4.如果一棵非空k(k2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T的高度为h(单结点的树h=1),则T的结点数最少为:(3分)

         注:咦?为什么这个公式出不来呢?

                自己还是没有分析出来,感觉这样推导公式的题还是用排除法会好一点,也更快一点

posted @ 2018-11-07 22:12  shenljyw  阅读(1849)  评论(0编辑  收藏  举报