关于树这一块,前期没有做一个学习的绪论,因为时间来不及了。在总结上回顾一下这些题目的一些特点
-
树的遍历的是数据结构树这一块中的一部分。
-
树的遍历和二叉树的遍历本质上相同。二叉树用指针也可以做,但是在考试中用静态数组处理树更有优势
-
树的遍历一般的模板是:输入——递归(设置边界-递归两步)——输出
-
输入形式的代码:
for(int i=0;i<presents;i++){ scanf("%d %d",&present,&num); for(int j=0;j<num;j++){ scanf("%d",&id); node[present].child.push_back(id); //把孩子结点压进数组 } }
-
DFS的代码形式:
void DFS(int index,int depth){ node[index].layer=depth; ans[node[index].layer]++; if(node[index].child.size()==0){ //设置边界 return; } for(int i=0;i<node[index].child.size();i++){ //递归 int child=node[index].child[i]; DFS(child,depth+1); } }
-
结构体的设置:
//根据需要设置结构体 struct Node{ int data; //数值或权重 vector<int> child; //孩子结点 int layer; //层次结构 }
-
在输出的过程中 ,如果要记录某个最大值,最小值,要在全局里设置。如本题:记录最浅深度,卡了20分钟,可能不是很熟练,做后面一题的时候就避免了这个坑(PS还是要多实践,多做)
-
可以用数组来记录答案更有优势,如本题:用数组记录答案