数据结构复习-树(持续更新)
数据结构快要结课啦,自己这周就先复习一下树吧!
题目是选于自己的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(k≥2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T的高度为h(单结点的树h=1),则T的结点数最少为:(3分)
注:咦?为什么这个公式出不来呢?
自己还是没有分析出来,感觉这样推导公式的题还是用排除法会好一点,也更快一点