我是靠谱客的博主 眯眯眼洋葱,最近开发中收集的这篇文章主要介绍数据结构1800关于树的代码精选(二)一、编写递归程序求孩子兄弟链表结构树中叶子结点数二、一棵二叉树以二叉链表来表示,求指定的某一层k上的叶子结点的个数三、设数T采用孩子兄弟链表表示,编写程序,计算树T的度四、统计二叉树各层中独生叶结点(既是叶结点又无兄弟结点)的数目,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

考研数据结构

树????的代码汇总(四)

一、编写递归程序求孩子兄弟链表结构树中叶子结点数

int leafnum(CTree root){
if(!root) return 0;
else if(!root->firstchild) return 1+leafnum(root->nextsibling);
else{
return leafnum(root->firstchild)+leafnum(root->nextsibling);
}
}

二、一棵二叉树以二叉链表来表示,求指定的某一层k上的叶子结点的个数

int leafnum(BiTree root,int k){
if(!root) return 0;
BiTree p=root,Queue[Max];
int front=-1,rear=0,last=0,level=1,leaf=0;
Queue[0]=p;
while (front<rear)
{
p=Queue[++front];
if(level==k&&!p->lchild&&!p->rchild) leaf++;
if(p->lchild) Queue[++rear]=p->lchild;
if(p->rchild) Queue[++rear]=p->rchild;
if(front==last){
last=rear;
level++;
}
}
return leaf;
}

三、设数T采用孩子兄弟链表表示,编写程序,计算树T的度

int degreenum(CTree T){
if(!T) return 0;
CTree s=T->firstchild;
int degree,maxdegree=0;
while(s){
maxdegree++;
s=s->nextsibling;
}
s=T->firstchild;
while(s){
degree=degreenum(s);
if(degree>maxdegree){
maxdegree=degree;
}
s=s->nextsibling;
}
return maxdegree;
}

四、统计二叉树各层中独生叶结点(既是叶结点又无兄弟结点)的数目

void leafnum(BiTree bt){
if(!bt) return ;
BiTree p=bt,Queue[Max];
int front=-1,rear=0,leaf=0,last=0,level=1;
Queue[0]=p;
while(front<rear){
p=Queue[++front];
if(p->lchild){
if(!p->lchild->lchild&&!p->lchild->rchild&&!p->rchild){
leaf++;
}
Queue[++rear]=p->lchild;
}
if(p->rchild){
if(!p->rchild->lchild&&p->rchild->rchild&&!p->lchild){
leaf++;
}
Queue[++rear]=p->rchild;
}
if(front==last){
last=rear;
level++;
cout<<level<<"层有"<<leaf<<"个独生叶结点";
leaf=0;
}
}
}

最后

以上就是眯眯眼洋葱为你收集整理的数据结构1800关于树的代码精选(二)一、编写递归程序求孩子兄弟链表结构树中叶子结点数二、一棵二叉树以二叉链表来表示,求指定的某一层k上的叶子结点的个数三、设数T采用孩子兄弟链表表示,编写程序,计算树T的度四、统计二叉树各层中独生叶结点(既是叶结点又无兄弟结点)的数目的全部内容,希望文章能够帮你解决数据结构1800关于树的代码精选(二)一、编写递归程序求孩子兄弟链表结构树中叶子结点数二、一棵二叉树以二叉链表来表示,求指定的某一层k上的叶子结点的个数三、设数T采用孩子兄弟链表表示,编写程序,计算树T的度四、统计二叉树各层中独生叶结点(既是叶结点又无兄弟结点)的数目所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(126)

评论列表共有 0 条评论

立即
投稿
返回
顶部