int Btdepth(Bitreee T){
if(!T)
return 0; //如果是空树,则高度为1;
int front =-1,rear=-1; //定义顺序队列,队列元素是二叉树结点指针,用于层序访问链式二叉树;
BiTree Q[MaxSize];
int last=0,level=0; //last表示当前层的最右节点在队列中的序号。level用于计算数地高度。
Q[++rear]=T; //根节点进队
BiTree p;
while(front<rear){ //队不空
p=Q[++front]; //出队
if(p->lchild) //左右孩子入队
Q[++rear]=p->lchild;
if(p->rchild)
Q[++rear]=p->rchild;
if(front==last){ //当出队到最右节点时,当前层次遍历完成,高度+1。更新新的最右节点的位置
level++;
last=rear;
}
}
return level;
}
思路:
二叉树的高度等于层数,要求层数,只需找到每层最右节点的个数。
当队头指针=最右节点时,更新最右节点。因为此时队列中正好刚刚将下一层的所有结点都遍历了,此时的队尾结点就是要更新的最右节点。
循环结束条件同层序遍历结束条件,队空时跳出循环