注:请注意对应题号,以下内容仅为个人代码,不代表最终答案,仅供参考。
目录
DC07PE15试编写算法,对一棵以孩子兄弟链表表示的树统计叶子的个数
DC07PE15试编写算法,对一棵以孩子兄弟链表表示的树统计叶子的个数
int Leave(CSTree T)
{ // Add your code here
if(!T) return 0;
return Leave(T->firstChild) + Leave(T->nextSibling) + (!T->firstChild ? 1 : 0);
}
DC07PE17求以孩子兄弟链表表示的树的度
int count(CSTree T){
if(!T) return 0;
return 1 + count(T->nextSibling);
}
int Degree(CSTree T)
{ // Add your code here
if(!T) return 0;
int sum = 0, res = 0;
CSTNode *node = T;
while(node){
sum = count(node);
if(sum > res) res = sum;
node = node->firstChild;
}
return res;
}
DC07PE22计算以双亲表示法存储的树的深度
int PTreeDepth(PTree T)
{ // Add your code here
if(!T.nodes) return 0;
int a[T.nodeNum] = {1}, res = 0;
for(int i=T.r; i<T.nodeNum; i++) {
if(T.nodes[i].parent != -1) a[i] = a[T.nodes[i].parent] + 1;
if(a[i] > res) res = a[i];
}
return res;
}
DC07PE24计算以双亲孩子表示法存储的树的深度
int PCTreeDepth(PCTree T)
{ // Add your code here
if(T.n == 0) return 0;
int res = 0, n = T.n;
PCTreeNode node;
while(n > 0){
int count = 0;
node = T.nodes[--n];
while(node.parent != -1){
count++;
node = T.nodes[node.parent];
}
if(count > res) res = count;
}
return res + 1;
}
DC07PE26计算以孩子-兄弟链表表示的树的深度
int TreeDepth(CSTree T)
{ // Add your code here
if(!T) return 0;
int res = 0, count = 0;
CSTNode *node = T->firstChild;
while(node) {
count = TreeDepth(node);
if(count > res) res = count;
node = node->nextSibling;
}
return res + 1;
}
DC07PE63实现并查集带路径压缩的查找操作
int find(MFSet S, int i)
{ // Add your code here
if(i<0 or i>S.n) return -1;
if(S.parent[i] < 0) return i;
int k = i, n = i;
while(S.parent[k] >= 0) k = S.parent[k];
while(n != k) {
n = S.parent[i];
S.parent[i] = k;
i = n;
}
return k;
}