求非空二叉树的宽度
方法一递归:
**算法思想:**当我们看图的时候我们可以知道求二叉树的宽度本质就是求其一层有多少个结点 那么如何用递归的方式去计算每一层结点的个数呢?
答案就是:我们只要知道当前结点是那一层就可以利用数组来统计数量了
int Max=0;
int conut_[MaxSize];
void getBiWid(BiTree *T,int k){ //k变量为当前层数 默认从第一层开始
if(!T)
return;
conut_[k]++;
if(conut_[k]>Max)
Max=conut_[k]; //Max为数组的最大值
getBiWid(T->rchild,k+1);
getBiWid(T->lchild,k+1);
}
非递归求解:
**算法思想:**对于非递归的求法本质就是先序遍历详见计算二叉树的高度递归与非递归 三种方法 C语言这里我使用了两种方案
int getBiWid2(BiTree *t){
if(!t){
return 0;
}
int max=0, front=-1,rear=-1,_count=0,size=0;;
BiTree *que[MaxSize];
que[++rear]=t;
_count++;
while(front<rear){
if(_count>max)
max=_count;
size=_count;
_count=0;
while(size--){
t=que[++front];
if(t->lchild!=NULL){
que[++rear]=t->lchild;
_count++;
}
if(t->rchild!=NULL){
que[++rear]=t->rchild;
_count++;
}
}
}
return max;
}