树的遍历 PAT 1004
来源:互联网 发布:数据库join 笛卡尔 编辑:程序博客网 时间:2024/06/11 00:07
题目地址:https://www.patest.cn/contests/pat-a-practise/1004
C语言实在有点麻烦
/*Member(Vertex):表示一个家庭成员,我使用了两个结构成员:level,表示这个人在家谱中的辈分,最高的辈分是0,辈分越低,level越大child,指向Child结构变量,即链表的第一个节点Child(Edge):表示亲子关系,也使用了两个结构成员:ID,表示这个孩子的IDiter,指向相同父母的下一个孩子Child变量*/#include#define MAX 999typedef struct Member *Member;typedef struct Child *Child;struct Member{ int level; Child child;};struct Child{ int ID; Child iter;};main(){ int i,k,N, M, ID, cID, K,level; struct Member nodes[100]; //定义一个Member变量 struct Child children[100]; //定义一个Child变量,这里指针变量不需要加*是因为前面已经定义了别名,*child就是child /* 读取数据,初始化邻接链表 */ scanf("%d %d", &N, &M); for(i = 1; i <= N; i++) { nodes[i].level = MAX; nodes[i].child = NULL; } nodes[1].level = 0; /* 根节点为0 */ for(i = 0,k=0; i < M; i++) //这么写是k只赋了一次值,k可以一直增长,若赋在第二层,则会重复赋值。 { //i iter) nodes[c->ID].level+=i; } /*对于每一层,找到叶子结点 */ int n = N, count; for(level = 0; n; level++) { count = 0; for(i = 1; i <= N; i++) if(nodes[i].level == level)//每层遍历 { n--; if(nodes[i].child == NULL) count++; /* set the children to next level */ Child c; for(c = nodes[i].child; c; c = c->iter)//其实就是一个赋值,他下一层所有的孩子赋为level+1 nodes[c->ID].level = level + 1; //一次性他的孩子全赋了 } printf("%d%c", count, n ? ' ' : '\0');//这句相当不错啊,n没了就输出NULL }}
粘一段C++的代码(DFS)
#include#include #include #include using namespace std; const int maxn=1e2+10; int n,m,k,x,f[maxn],deep,y; vector t[maxn]; void dfs(int x,int dep) { deep=max(deep,dep); if (!t[x].size()) f[dep]++; for (int i=0;i
阅读全文
0 0
- 树的遍历 PAT 1004
- 树的遍历---pat
- pat -- 二叉树的遍历 (浙大的PAT)
- pat 1004---简单的建树+层次遍历
- PAT L2-006. 树的遍历
- PAT L2-006. 树的遍历
- PAT L2-006. 树的遍历
- PAT L2-006. 树的遍历
- PAT L2-006 树的遍历
- 二叉树 三种遍历构造二叉树+层次遍历 题目 PAT 树的遍历
- PAT-4C-L2-006-树的遍历(DFS)
- PAT L2-006. 树的遍历(二叉树重构)
- PAT 树的遍历 1086. Tree Traversals Again
- 1004. Counting Leaves (30)-PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
- **浙大PAT甲级 1086 二叉树的先中根遍历求后根遍历
- PAT 1020. Tree Traversals (25)(树的构造与遍历,通过后序中序输出层次遍历)
- PAT程序设计考题——甲级1004 遍历树节点(计算树每层的叶子节点数目)
- pat 1090,树的遍历,层序,先根遍历,利用缓存来优化,“以土地换和平”
- 设计模式-单例模式之懒汉式-多线程
- 5个例子搞懂scanf()
- C/C++学习之若干问题
- Java中用递归遍历目录下所有文件
- 半兼容ARM的软核处理器编写-1
- 树的遍历 PAT 1004
- cookie不能存中文问题
- 磁盘分区与目录结构
- 由浅入深JavaScript3基础-运算符和类型转换
- linux服务器常用命令
- [leetcode]111. Minimum Depth of Binary Tree
- Wampserver安装和配置
- easyUI验证 正则表达式
- html跨域访问