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;
}
思路:
二叉樹的高度等于層數,要求層數,隻需找到每層最右節點的個數。
當隊頭指針=最右節點時,更新最右節點。因為此時隊列中正好剛剛将下一層的所有結點都周遊了,此時的隊尾結點就是要更新的最右節點。
循環結束條件同層序周遊結束條件,隊空時跳出循環