算法
/*
非递归队列求二叉树深度,每层的最后一个结点出队的时候,队里面剩余的元素就是这一层
所有的结点,most记录了前面几层最多一层的结点数,跟most作比较,若大于most,就进行记录
*/
int BTDepth(BiNode *T){
if(!T) return 0;
int front = -1, rear = -1;
int last = 0;
int most = 1;
BiNode* Queue[maxsize];
Queue[++rear] = T;
BiNode *temp;
while(front != rear){
temp = Queue[++front];
if(temp->lchild){
Queue[++rear] = temp->lchild;
}
if(temp->rchild){
Queue[++rear] = temp->rchild;
}
if(front == last){
if(most<rear-front) most=rear-front;
last = rear;
}
}
return most;
}
测试环境
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
//二叉树的创建序列
//ab#df###c#e##
//abd##e##cf###
//abce##f##dg##h###
typedef struct BiNode{
char date;
struct BiNode *lchild,*rchild;
}BiNode;
BiNode* CreateBiTree();
int BTDepth(BiNode *T);
int main(){
BiNode* t = CreateBiTree();
int most = BTDepth(t);
printf("%d",most);
return 0;
}
/*
非递归队列求二叉树深度,每层的最后一个结点出队的时候,队里面剩余的元素就是这一层
所有的结点,most记录了前面几层最多一层的结点数,跟most作比较,若大于most,就进行记录
*/
int BTDepth(BiNode *T){
if(!T) return 0;
int front = -1, rear = -1;
int last = 0;
int most = 1;
BiNode* Queue[maxsize];
Queue[++rear] = T;
BiNode *temp;
while(front != rear){
temp = Queue[++front];
if(temp->lchild){
Queue[++rear] = temp->lchild;
}
if(temp->rchild){
Queue[++rear] = temp->rchild;
}
if(front == last){
if(most<rear-front) most=rear-front;
last = rear;
}
}
return most;
}
//递归方法中序创建二叉树
BiNode* CreateBiTree(){
BiNode *p;
char a;
scanf("%c",&a);
if(a=='#')
p=NULL;
else{
p=(BiNode *)malloc(sizeof(BiNode));
p->date=a;
p->lchild=CreateBiTree();
p->rchild=CreateBiTree();
}
return p;
}
//递归方法中序遍历二叉树
void Traverse(BiNode *p){
if(p==NULL){
return;
}
else{
Traverse(p->lchild);
printf("%c",p->date);
Traverse(p->rchild);
}
return;
}