原理:
1.採用層次遍歷的方法,
2.設置變量level記錄當前結點所在層數,
3.設置變量last指向當前層最右結點,
4.每次層次遍歷出隊時,與last指針作比較,若兩者相等,那麼層數加1,
並讓last指向下一層最右結點,至少遍歷完成.level的值即爲二叉樹的高度
#include <stdio.h>
#include <stdlib.h>
typedef 1000 Maxsize;
typedef struct BiTree{
int data;
struct BiTree *rchild,*lchild;
};
int Btdepth(BiTree T){
if (!T)
{
return 0; //樹空,高度爲0
}
int front=-1,rear=-1;
int last=0,level=0; //last指向下一層第一個結點的位置
BiTree Q[Maxsize],p; //設置隊列Q
Q[++rear] = T; //將根結點入隊
while(front<rear){ //隊不空,則循環
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;
}