第五章学习小结

一、知识框架

第五章学习小结_第1张图片

 

 

 二、课堂疑问解答

1、定义

 第五章学习小结_第2张图片

 

 

 

①typedef struct   ②me:typedef struct

{    {

char data; char data;

int parent; int parent;

}Node; }BiTNode;

typedef struct int n;

{     cin >> n;

Node *Tree; BiTNode *BiTree = new BiTNode[n];

int t;//记录根结点

}BiTree;

无论以何种方式遍历,总是从根结点开始,若是用第二种方法,每次时间复杂度都为O(n),而若将根结点所对应的下标值与数组打包成结构体,每次查找根结点的时间复杂度为O(1)

 

2、该定义正确,且在堆中用new来人工分配空间

 第五章学习小结_第3张图片

 

 

 

若:

int n;

cin >> n;

int a[n];//错误,不合法,在栈中分配空间,C语言中合法,但在C++中不合法

3第五章学习小结_第4张图片

 

 

2点错误,char data[MAXSIZE]相当于一个char型数组,但是parent只有一个,而题目要求一个data就必须对应一个parent。通常提到的查找指定结点是根据数据元素来找。

数组中元素存储是从下标0开始,若已知结点对应下标为i,则其双亲结点的下标,i/2==0,则为0,否则为i/2-1;左孩子为2*n+1,右孩子为2*(n+1),且都小于n-1;

4

 第五章学习小结_第5张图片

 

 

什么都不做,直接退出,返回上一层;若不为空,怎是中序遍历的方式输出该树

5、层次遍历

 第五章学习小结_第6张图片

 

 

Queueq;  q是队列,q.front获取头元素

总:队列和栈是解决某一问题的工具,具体使用哪一种需要根据实际问题而定,可以查阅STL了解两者所包含的函数方法以及注意事项

6

 第五章学习小结_第7张图片

 

 

不正确,递归定义必须在前面先声明才能使用,否则编译会出错

改正:typedef struct CNode

7、在一根度为3的树T中,若有10 个度为3的结点,一个度为2的结点,10个度为1的结点,则树T的叶子结点个数为多少?

总结点数=分支总数+1 即10*3+2*1+10 + 1 = 43

叶子节点=43-10-1-10 = 22

三、pta作业和实践

1、

 第五章学习小结_第8张图片

 

   一开始有点懵逼,百度查了一下,但还是没理解,所以就借助课本的图来帮助理解,从中也找到了之前忽略的一个知识点,森林转换为二叉树时,对应有“左孩子,有兄弟的”的规律

在最后生成的二叉树中,父子关系在对应森林关系中可能是兄弟关系或原本就是父子关系。

情形:若结点v是结点u的第二个孩子结点,在转换时,结点v就变成结点u第一个孩子的右孩子,符合要求。

情形:结点uv是兄弟结点的关系,但两者之中还有一个兄弟结点k,则转换后,结点v就变为结点k的右孩子,而结点k则是结点u的右孩子,符合要求。

情形:结点v的父结点是原先的父结点或兄弟结点。若结点u的父结点与v的父结点是兄弟关系,则转换之后,不可能出现结点u是结点v的父结点的父结点。

第五章学习小结_第9张图片

 

 2、实践树的同构用到的递归算法思路有点乱,去博客上找到了相关编程题,借用了它的算法,还在琢磨中

四、小组合作

1、同样的问题,又忘了释放空间,每次打代码太注重于结果而忽略其他比如优化还有释放空间

2、堆和栈的空间不同,申请数组空间100000的时候,在栈中会报错,而在堆中可以,要注意数组有效元素是从1开始

3、树的创建和定义废了很长时间,更能体会到画图的好处,能帮我们理清思路,写代码的时候就从容不迫

五、不足和遇到的问题

1、有些课程没能及时预习,导致看视频的时候有点手足无措,只好最后再看一遍树再看视频,废了很长时间

2、知识掌握的不牢,打代码的时候总是需要翻翻书回顾书上的代码

3、应用队列的时候,不知道为什么用size函数进入不了循环,最后只能用成了empty函数

 

你可能感兴趣的:(第五章学习小结)