本算法和求二叉树的最大宽度类似,均是使用层序遍历的方式进行。
int BDepth(BiTree T){
if(T == NULL) return 0;
int front=rear=level=last=0;//头尾指针,层数,以及一层的最右的节点
BiTree Q[MaxSize];
Q[rear++] = T;//根节点入队
BiTree p;
while(front <= last){ //当头指针小于本层的最右节点时,一直循环
p = Q[++front]; //头节点出队
if(p->lchild) Q[rear++] = p->lchild;//左孩子入队
if(p->rchild) Q[rear++] = p->rchild;//右孩子入队
if(front == last){ //头节点指向本层的最右节点时,说明本层遍历结束
level++; //层数++
last = rear; //让最右指针指向下一层的尾节点
}
}
return level;
}