思路:用到非递归的思想,毫无疑问就是使用 树的层次遍历方法来做
采用层次遍历算法,设置变量level记录当前的节点所在存数。设置变量level指向当前节点的最右边,每次遍历之后就和level进行比较,若二者相等,那么层数加1,并让level指向下一层的最右边节点,至少遍历完成。level就是二叉树高度
int BTdepth(Bitree T)
{
if(!T) //树空,高度是0
{
return 0;}
int front=-1, rear=-1;
int last=0, level=0; //last指向下一层的第一个节点位置
Bitree Q[maxsize];
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==level)//处理该层的最右边节点
{
level++;//层数加1
last=rear;//last指向下一层
}
}
return level;
}